2013-02-25 31 views

回答

1

如果你正在编写某些应用程序时,你可能会做

KERNELVERSION=$(shell uname -a) 

或其他一些shell命令,也许cat /proc/version

对于一个内核模块,看cnicutar's answer

+0

我该如何comapre相同,并确认它在MAKEFILE? – codingfreak 2013-02-27 11:52:40

1
KVER = $(shell uname -r) 
KMAJ = $(shell echo $(KVER) | \ 
sed -e 's/^\([0-9][0-9]*\)\.[0-9][0-9]*\.[0-9][0-9]*.*/\1/') 
KMIN = $(shell echo $(KVER) | \ 
sed -e 's/^[0-9][0-9]*\.\([0-9][0-9]*\)\.[0-9][0-9]*.*/\1/') 
KREV = $(shell echo $(KVER) | \ 
sed -e 's/^[0-9][0-9]*\.[0-9][0-9]*\.\([0-9][0-9]*\).*/\1/') 

kver_ge = $(shell \ 
echo test | awk '{if($(KMAJ) < $(1)) {print 0} else { \ 
if($(KMAJ) > $(1)) {print 1} else { \ 
if($(KMIN) < $(2)) {print 0} else { \ 
if($(KMIN) > $(2)) {print 1} else { \ 
if($(KREV) < $(3)) {print 0} else { print 1 } \ 
}}}}}' \ 
) 

ifeq ($(call kver_ge,3,8,0),1) 
echo great or equal than 3.8.0 
else 
echo less than 3.8.0 
endif 
+0

你能用几句话解释你的代码吗? – 2015-03-17 07:57:04

0

我没有50的声誉,所以我不能回答评论voght先生的评论(给予好评我,所以我能!),但我只是作为另一个答案做到这一点,所以这里去。

该代码使用壳内置掏出(的bash)命令,如UNAME回声,并分配可变类宏如KVER到结果中。 uname提供了内核版本,代码继续使用unix sed(流编辑器; man sed了解更多)从结果中提取每个主要,次要和转数,并将它们分配给离散变量像宏。然后,他指定一个宏名,kver_ge来测试内核版本是否比作为参数提供的一个更大的过程(使用AWK测试如果 shell内置)。 很酷,适合我。