Linux内核驱动编译
在看LINUX设备驱动(第三版)的时候,需要自己手敲代码然后验证。因此需要搭建一个可以编译内核驱动的编译环境。本文搭建ARM的交叉编译环境,能够单独编译出模块ko。
1 代码准备
在driver目录下创建helloworld文件夹,并在该文件夹下创建hello.c和Makefile文件。
hello.c源文件内容如下:
#include <linux/module.h>
#include <linux/init.h>
static int __init hello_init(void)
{
printk(KERN_ALERT "welcome, hello\n");
return 0;
}
static void __exit hello_exit(void)
{
printk(KERN_ALERT "bye, hello\n");
}
MODULE_LICENSE("GPL");
module_init(hello_init);
module_exit(hello_exit);
Makefile内容如下:
ifneq ($(KERNELRELEASE),)
obj-m := hello.o
else
KERNELDIR := /home/code/BMC/Aspeed-Linux/linux
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
$(MAKE) -C $(KERNELDIR) M=$(PWD) clean
endif
KERNELDIR是你下载的linux源代码并解压好的路径。根据实际修改KERNELDIR的值。
2 编译
需要先编译完整的linux内核,具体可以参考linux kernel编译以及根文件系统的制作 - cockpunctual - 博客园。编译完内核后,进入前面创建的hello文件夹编译ko。
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
编译完的ko可以放入到制作的根文件系统中,用qemu进行调试。


制作根文件系统和使用qemu调试都可以参考前面的博客。
3 Reference

浙公网安备 33010602011771号