 |
【症状】 编译内核模块时,只显示最底部的Error,不显示任何C语言的错误信息。 [oct1158@fed41-bh8f7e0 first]$ make make -C /home/oct1158/Documents/Code/C/luckfox-pico/sysdrv/source/kernel M=/home/oct1158/Documents/Code/C/driver_test/first modules ARCH=arm CROSS_COMPILE=/home/oct1158/Documents/Code/C/luckfox-pico/tools/linux/toolchain/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf- make[2]: *** [scripts/Makefile.build:273: /home/oct1158/Documents/Code/C/driver_test/first/test.o] Error 1 make[1]: *** [Makefile:1935: /home/oct1158/Documents/Code/C/driver_test/first] Error 2 make: *** [Makefile:7: build] Error 2 [oct1158@fed41-bh8f7e0 first]$
【原因】 make命令中含有s字符,导致进入了安静模式。 make -C /home/oct1158/Documents/Code/C/luckfox-pico/sysdrv/source/kernel M=/home/oct1158/Documents/Code/C/driver_test/first modules ARCH=arm CROSS_COMPILE=/home/oct1158/Documents/Code/C/luckfox-pico/tools/linux/toolchain/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf- 在这句命令中,“driver_test”就含有s字符,所以就会触发安静模式。
$(MAKEFLAGS)变量的值: rR --no-print-directory -- CROSS_COMPILE=/home/oct1158/Documents/Code/C/luckfox-pico/tools/linux/toolchain/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf- ARCH=arm M=/home/oct1158/Documents/Code/C/driver_test/first
$(filter-out --%,$(MAKEFLAGS))表达式的值: rR CROSS_COMPILE=/home/oct1158/Documents/Code/C/luckfox-pico/tools/linux/toolchain/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf- ARCH=arm M=/home/oct1158/Documents/Code/C/driver_test/first 可见这个表达式含有s字符。
【解决办法】 注释掉内核根目录的Makefile文件里面的下面三句话。 ifneq ($(findstring s,$(filter-out --%,$(MAKEFLAGS))),) quiet=silent_ endif 禁止进入安静模式。
|
 |
修改后就有错误信息输出了。 [oct1158@fed41-bh8f7e0 first]$ make make -C /home/oct1158/Documents/Code/C/luckfox-pico/sysdrv/source/kernel M=/home/oct1158/Documents/Code/C/driver_test/first modules ARCH=arm CROSS_COMPILE=/home/oct1158/Documents/Code/C/luckfox-pico/tools/linux/toolchain/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf- CC [M] /home/oct1158/Documents/Code/C/driver_test/first/test.o /home/oct1158/Documents/Code/C/driver_test/first/test.c: In function 'mytestdriver_probe': /home/oct1158/Documents/Code/C/driver_test/first/test.c:10:9: error: implicit declaration of function 'devm_gpiod_get'; did you mean 'em_pd_get'? [-Werror=implicit-function-declaration] gpio = devm_gpiod_get(&pdev->dev, NULL, GPIOD_OUT_HIGH); // led on ^~~~~~~~~~~~~~ em_pd_get /home/oct1158/Documents/Code/C/driver_test/first/test.c:10:42: error: 'GPIOD_OUT_HIGH' undeclared (first use in this function) gpio = devm_gpiod_get(&pdev->dev, NULL, GPIOD_OUT_HIGH); // led on ^~~~~~~~~~~~~~ /home/oct1158/Documents/Code/C/driver_test/first/test.c:10:42: note: each undeclared identifier is reported only once for each function it appears in /home/oct1158/Documents/Code/C/driver_test/first/test.c: In function 'mytestdriver_remove': /home/oct1158/Documents/Code/C/driver_test/first/test.c:28:3: error: implicit declaration of function 'gpiod_set_value'; did you mean 'bitmap_set_value8'? [-Werror=implicit-function-declaration] gpiod_set_value(gpio, 0); // led off ^~~~~~~~~~~~~~~ bitmap_set_value8 cc1: all warnings being treated as errors make[2]: *** [scripts/Makefile.build:273: /home/oct1158/Documents/Code/C/driver_test/first/test.o] Error 1 make[1]: *** [Makefile:1935: /home/oct1158/Documents/Code/C/driver_test/first] Error 2 make: *** [Makefile:7: build] Error 2 [oct1158@fed41-bh8f7e0 first]$
|
 |
事实上,在编译内核模块时,就算make命令没带CROSS_COMPILE=参数,M=参数肯定是必须带的。我们很难保证M参数里面没有s这个字符。
|
 |
修改C语言的错误后: [oct1158@fed41-bh8f7e0 first]$ make make -C /home/oct1158/Documents/Code/C/luckfox-pico/sysdrv/source/kernel M=/home/oct1158/Documents/Code/C/driver_test/first modules ARCH=arm CROSS_COMPILE=/home/oct1158/Documents/Code/C/luckfox-pico/tools/linux/toolchain/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf- CC [M] /home/oct1158/Documents/Code/C/driver_test/first/test.o MODPOST /home/oct1158/Documents/Code/C/driver_test/first/Module.symvers LD [M] /home/oct1158/Documents/Code/C/driver_test/first/test.ko [oct1158@fed41-bh8f7e0 first]$ 编译通过了,CC MODPOST LD等字样也能正常显示了。
|