源码环境的搭建
Install源码
>sudo apt-cache search linux-source
linux-source - Linux kernel source with Ubuntu patches
linux-source-4.4.0 - Linux kernel source for version 4.4.0 with Ubuntu patches
因差异这个略有不同,选择linux-source-4.4.0即可。按照你显示的版本号而定。
>sudo apt-get install linux-source-4.4.0
安装完成后,在/usr/src/ 目录下会出现两个新文件,一个为linux-source-4.4.0文件夹,另外一个为 linux-source-4.4.0.tar.bz2。
>tar jxvf linux-source-4.4.0.tar.bz2 -C /home/yourdir/Kernel
解压到你的文件夹下 或者解压到当前目录下也行。
在解压出来的的linux-source-4.4.0目录下执行配置内核的工作
>sudo make oldconfig //配置内核
>sudo make //编译内核 此处时间花费较长 若出现类似openssl/opensslv.h No such file or directory 这样的 错误则表明需要安装 libssl-dev 执行sudo apt-get install libssl-dev
>sudo make modules //编译模块
>sudo make modules_install //安装模块
第一个.c文件与Makefile文件
在自己工作目录下新建一个文件夹并在此下建立hello.c与Makefile文件
Makefile文件可以直接用vim Makefile建立,注意M为大写。
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 "Goodbye, cruel world\n");
}
module_init(hello_init);
module_exit(hello_exit);
Makefile文件。//注意空格与Tab
obj-m :=hello.o
hellomodule-objs :=module #可以把hello这个改成你的命名
KERNELDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
保存后执行 >sudo make
即可生成hello.ko文件。既可以利用此文件来装载到内核中去了。
装载命令 >sudo insmod ./hello.ko
装载完成后可以使用 > lsmod //查看当前安装的驱动模块。
> cat /var/log/syslog 中可以直接看到输出的 hello 与Goodbye // 或者使用 >dmesg | tail 此条命令更简洁
卸载命令 > sudo rmmod ./hello.ko
第一次配置环境及编写Makefile的过程中遇到了很多坑,关于驱动的进一步学习还需要参考相关的Linxu驱动开发的相关书籍及教程。