日期:2014-05-16 浏览次数:20633 次
想学习一下驱动,于是找了一个实例HelloWorld,编写自己的第一个驱动程序
安装ubuntu系统,打开终端,以root权限进入,命令如下
bory@borya:~$ sudo -s
root@borya:~# apt-cache search linux-source linux-source - Linux kernel source with Ubuntu patches linux-source-3.0.0 - Linux kernel source for version 3.0.0 with Ubuntu patches
接着下载内核源码包
root@borya:~# apt-get install linux-source-3.0.0
root@borya:~# cd /usr/src/ root@borya:/usr/src# ls linux-headers-3.0.0-12 linux-source-3.0.0 vboxguest-4.1.16 linux-headers-3.0.0-12-generic linux-source-3.0.0.tar.bz2 root@borya:/usr/src# tar jxvf linux-source-3.0.0.tar.bz2
root@borya:/usr/src/linux-source-3.0.0# make oldconfig
root@borya:/usr/src/linux-source-3.0.0# make bzImage
继续编译modules,也需要1个多小时
root@borya:/usr/src/linux-source-3.0.0# make modules
最后是安装modules
root@borya:/usr/src/linux-source-3.0.0# make modules_install
在自己任意工作目录下,新建一个目录test。
编写hello.c
#include "linux/init.h" #include "linux/module.h" static int hello_init(void) { printk(KERN_ALERT "Hello World linux_driver_module\n"); return 0; } static void hello_exit(void) { printk(KERN_ALERT "This is first step linux_driver_module\n"); } module_init(hello_init); module_exit(hello_exit);
ifneq ($(KERNELRELEASE),) obj-m := hello.o else KERNELDIR ?= /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) default: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules endif
bory@borya:~/driver/hello$ make
bory@borya:~/driver/hello$ insmod ./hello.ko
root@borya:~/driver/hello$rmmod ./hello.ko