网站按天扣费优化推广,网站一键生成wap,wordpress最新手册,网站建设销售策划方案1、在字符设备目录下建立hello目录
~/Linux/rk356x_linux/kernel/drivers/char/hello
2、进入hello目录#xff0c;新建hello.c、Makefile、Kconfig三个文件 3、Kconfig是打开make menuconfig配置界面是后的选项#xff0c;这Kconfig是在字符设备下的。
config HELLOtrist…1、在字符设备目录下建立hello目录
~/Linux/rk356x_linux/kernel/drivers/char/hello
2、进入hello目录新建hello.c、Makefile、Kconfig三个文件 3、Kconfig是打开make menuconfig配置界面是后的选项这Kconfig是在字符设备下的。
config HELLOtristate hellohelphello testconfig后面的HELLO就是对应配置后在kernel目录下的**.config中的CONFIG_HELLO配置项** tristate是三态编译进内核(y)、不编译(n)、编译成模块(m)。hello是配置界面的显示字符串 可以是bool是二值。编译进内核、不编译 可以是string int help是帮助信息可以使用comment “xxxx”这xxx就会显示在hello字符串下面
4、Makefile是编译hello.c的方式。这里编译到内核就是会生成hello.o。如果编译成模块就是生成hello.ko。
obj-$(CONFIG_HELLO) : hello.oCONFIG_HELLO这个就是Kconfig中的config后面字符串 $(CONFIG_HELLO)这个值根据menuconfig配置是n、y、m
5、hello是在char字符设备下一级目录所以需要修改char目录下的Makefile、Kconfig
Kconfig增加source “drivers/char/hello/Kconfig”就是打开菜单界面后char字符设备下增加一个菜单 Makefile增加obj-y hello/ 这里hello是目录所以需要增加/。就是默认编译hello文件下的文件
6、编写hello.c文件
#include linux/module.h
#include linux/kernel.hstatic int __init helloworld_init(void) {printk(KERN_EMERGhello world init\n);return 0;
}
static void __exit helloworld_exit(void) {printk(KERN_EMERGhello world exit\n);
}module_init(helloworld_init);
module_exit(helloworld_exit);
MODULE_LICENSE(GPL v2);
MODULE_AUTHOR(Ching);7、以上准备好后进入kernel目录
7.1 设置芯片架构必须要我使用的是rk3568芯片
export ARCHarm647.2 输入make menuconfig打开配置界面 7.3 进入drivers-char看新增的hello是否正常添加*表示编译进内核。 8、编译之前还需要注意一个细节
8.1、编译内核使用的./build.sh。打开看到make了RK_KERNEL_DEFCONFIGmake xxx_defconfig就会把默认的配置生成一个.config文件这.config文件又是编译内核的配置项。所以实际上我们需要修改的是这RK_KERNEL_DEFCONFIG文件 8.1.1、build.sh文件的定义在BoardConfig.mk文件中 所以我们最终需要修改的还是rockchip_linux_defconfig文件默认的配置文件路径
8.2、修改make menuconfig后保存的配置文件是kernel/.config。所以使用.config覆盖rockchip_linux_defconfig这样编译内核时候就是还是使用菜单配置生成的配置文件来编译。
cp .config arch/arm64/configs/rockchip_linux_defconfig9、开始编译
9.1、进入kernel上级目录开始编译
rk356x_linux$ ./build.sh kernel9.2、编译成功后hello目录下生成一个hello.o的文件说明已经编译成功。
9.3、生成的内核镜像在kernel/boot.img。下载到板子运行。
9.4、运行后使用查询是否真正运行了hello。就看是否有hello.c中写的hello world init字符串打印 dmsg | grep “hello” 10、小结
1、开始时候没有设置ARCH就打开menuconfig就配置生成的.config不对导致编译内核时候出现好多未定义的引用 小记一下以免忘记。