如何制作 Linux Kernel Headers
在制作Linux Kernel Headers前,要先安装必要的工具和库:
# apt-get install build-essential libncurses5-dev
获取Linux内核源码
# git clone 服务器的内核git仓库或是外部仓库
生成 .config文件
# mkdir /usr/src/linux-headers-$(uname -r)
# cd kernel
# make O=/usr/src/linux-headers-$(uname -r) cubieboard6_s500_linux_defconfig
将中间文件(包括 .config)重定向到"O"所指向的目录。
生成 Linux Kernel Headers
# cd kernel
# make O=/usr/src/linux-headers-$(uname -r) modules_prepare CROSS_COMPILE=""
modules_prepare - Set up for building external modules
/usr/src/linux-headers-$(uname -r) 即最终的Linux Kernel Headers.在使用前,需在/lib/modules/$(uname-r)目录下创建软链接build,并指向/usr/src/linux-headers-$(uname-r). 如下:
ln -s /usr/src/linux-headers-$(uname -r) /lib/modules/3.10.37/build
删除原/usr/src/linux-headers-$(uname-r)目录中的source软链接, 最终可用的Linux Kernel Headers如下图所示:
rm /usr/src/linux-headers-3.10.37/source
如何在板上编译驱动创建测试驱动helloworld
helloworld.c: 驱动程序
- #include<linux/init.h>
- #include<linux/module.h>
- static int __init hello_init(void)
- {
- printk(KERN_WARNING "hello,world.\n");
- return 0;
- }
- static void __exit hello_exit(void)
- {
- printk(KERN_WARNING "goodbye world\n");
- }
- module_init(hello_init);
- module_exit(hello_exit);
- MODULE_LICENSE("GPL");
- MODULE_DESCRIPTION("Just for test");
复制代码
Makefile:
- KDIR := /lib/modules/`uname -r`/build # Point to Linux Kernel Headers
- PWD := $(shell pwd)
- obj-m := helloworld.o
- default:
- make -C $(KDIR) M=$(PWD) modules CROSS_COMPILE=""
- clean:
- rm -rf *.o *.cmd *.ko *.mod.c *.tmp_versions *.order *.symvers
复制代码注意需要TAB缩进
编译驱动程序
#make
执行上述命令,输出ko驱动文件,如下图所示: