主机环境:
ubuntu 16.04 64bit
在虚拟机中安装完ubuntu 16.04后,默认的环境是可以直接进行驱动开发的,而无需重新编译内核树。
下面以Linux ubuntu 4.13.0-36-generic ubuntu 16.04 64bit为例,介绍简单驱动程序的编写和测试。
1.hello.c文件
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
printk(KERN_ALERT"hello world!\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT"hello, exit\n");
}
module_init(hello_init);
module_exit(hello_exit);
2.Makefile文件
obj-m := hello.o
3.然后在外部模块构建目录下执行命令:
$make -C /lib/modules/`uname -r`/build M=`pwd`
如果编译提示找不到某个头文件 ,类似 :
./include/uapi/asm-generic/int-ll64.h:11:29: fatal error: asm/bitsperlong.h: No such file or directory
则用sudo make进行编译。
应该是root管理员配置的path环境变量的问题。使用默认用户配置的环境变量和root用户不一样,导致sudo make的时候,使用了不同的库和编译工具。
4.安装模块
$sudo insmod hello.ko
然后查看/var/log/syslog,会有日志信息输出
$cat /var/log/syslog
或打开另一个中断,跟踪查看
tail -f /var/log/syslog
删除模块:
$sudo rmmod hello.ko
$lsmod