LDD(linux设备驱动)环境搭建
LDD(linux设备驱动程序)环境搭建
2020/12/24 10:08
vbox下安装ubuntu5.04 (i386) iso下载地址
安装gcc
sudo apt-get install gcc
(应该是本地源吧gcc version 3.3.5
)将下载的linux2.6.10源码
tar -xzvf xx
解压到/usr/src目录,然后进入此目录1
2
3
4make oldconfig
make bzImage
make modules
make modules_install制作initrd.img文件
mkinitrd -o /boot/initrd.img-2.6.10 2.6.10
2.6.10表示的是
/lib/modules
下的目录sudo update-grub
重启F12选2.6.10
随便选一个目录放测试模块代码,
hello.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("GPL");
static int hello_init(void)
{
printk(KERN_ALERT"hello,world\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT"exit\n");
}
module_init(hello_init);
module_exit(hello_exit);Makefile
1
2
3
4
5
6
7
8obj-m := hello.o
KDIR := /lib/modules/2.6.10/build
all:
make -C $(KDIR) M=$(PWD) modules
clean:
rm -f *.ko *.o *.mod.o *.mod.c *.symversobj-m
编译可装载的模块,obj-y
是编译进内核KDIR
指定内核目录树的路径,-C
是make的更换目录选项M
使用
M=dir
指定要构建的外部模块的目录(就是hello.c的目录)make modules
表示编译模块
在hello.c目录下执行make
sudo提权
insmod hello.ko
加载模块rmmod hello
卸载模块dmesg
查看日志消息(如果控制台没有)
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!