0
点赞
收藏
分享

微信扫一扫

在Linux开发板上编译驱动

如何制作 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


在Linux开发板上编译驱动_软链接


如何在板上编译驱动创建测试驱动helloworld

helloworld.c: 驱动程序

  1. #include<linux/init.h>
  2. #include<linux/module.h>
  3. static int __init hello_init(void)
  4. {
  5. printk(KERN_WARNING "hello,world.\n");
  6. return 0;
  7. }

  8. static void __exit hello_exit(void)
  9. {
  10. printk(KERN_WARNING "goodbye world\n");

  11. }

  12. module_init(hello_init);
  13. module_exit(hello_exit);
  14. MODULE_LICENSE("GPL");
  15. MODULE_DESCRIPTION("Just for test");

复制代码

Makefile:

  1. KDIR := /lib/modules/`uname -r`/build # Point to Linux Kernel Headers
  2. PWD := $(shell pwd)

  3. obj-m := helloworld.o

  4. default:
  5. make -C $(KDIR) M=$(PWD) modules CROSS_COMPILE=""

  6. clean:
  7. rm -rf *.o *.cmd *.ko *.mod.c *.tmp_versions *.order *.symvers

复制代码注意需要TAB缩进


编译驱动程序

#make

执行上述命令,输出ko驱动文件,如下图所示:


举报

相关推荐

0 条评论