linux设备驱动--scull
《linux设备驱动》 一书中的例程都可以在PC主机的linux环境中运行,而不必下载到arm平台的linux/android环境中
查看系统版本
[email protected]:~/linux_driver/hello$ uname -r
4.2.0-27-generic
[email protected]:~/linux_driver/hello$ cat /etc/issue
Ubuntu 14.04.5 LTS \n \l
[email protected]:~/linux_driver/hello$ vim hello.c
1 /* hello.c */
2 #include <linux/init.h>
3 #include <linux/module.h>
4 MODULE_LICENSE("leo BSD/GPL");
5 static int hello_init(void)
6 {
7 printk(KERN_ALERT "Hello, world\n");
8 return 0;
9 }
10 static void hello_exit(void)
11 {
12 printk(KERN_ALERT "Goodbye, Hello world\n");
13 }
14 module_init(hello_init);
15 module_exit(hello_exit);
~
~
Makefile
[email protected]:~/linux_driver/hello$ vim Makefile
1 obj-m += hello.o
2 CURRENT_PATH:=$(shell pwd)
3 LINUX_KERNEL_PATH:=/lib/modules/$(shell uname -r)/build
4 all:
5 $(MAKE) -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules
6 clean:
7 rm -rf .*.cmd *.o *.mod.c *.ko .tmp_versions
8
依赖于系统源码内核目录 /usr/src/linux-headers-4.2.0-27
在/home/sunhz/linux_driver/hello 使用make 命令编译生成 hello.ko
加载ko动态库
[email protected]:~/linux_driver/hello$ sudo insmod hello.ko
[email protected]:~/linux_driver/hello$
查看log打印
[email protected]:~/linux_driver/hello$ sudo cat /var/log/syslog | grep Hello
Mar 15 14:11:30 R720xd kernel: [337056.403621] Hello, world
[email protected]:~/linux_driver/hello$
卸载ko动态库
[email protected]:~/linux_driver/hello$ sudo rmmod hello.ko
[email protected]:~/linux_driver/hello$ sudo cat /var/log/syslog | grep Hello
Mar 15 14:11:30 R720xd kernel: [337056.403621] Hello, world
Mar 15 14:13:17 R720xd kernel: [337163.514790] Goodbye, Hello world
可以查看到源码
printk(KERN_ALERT "Hello, world\n");
printk(KERN_ALERT "Goodbye, Hello world\n");
成功打印