Linux_Ubuntu下驱动开发环境搭建
linux下驱动需要编译内核
1.首先是基本的开发工具,如gcc,gdb,make等
apt-get install build-essential
2.其次是找到你所用的ubuntu的版本号:uname -r
然后查看你要下载的源码包:apt-cache search linux-source 这个命令会得到可以下载的源码包
3.下载源:sudo apt-get install linux-source-3.2.0
会默认下载到/usr/src中,进入该文件夹并解压缩sudo tar jxvf linux-source-3.2.0.tar.bz2
得到源 /usr/src/linux-source-xxx
4.配置内核:有make oldconfig(命令行),make menuconfig(图形界面)
在此选用 :oldconfig来配置,进入/usr/src/linux-source-xxx并输入sudo make oldconfig 在配置的过程中如果需要选y,n,m直接点回车即可
(其中y指的是编译进内核,n是不编译,m指的是编译成模块)
5.然后开始编译内核:在/usr/src/linux-source-xxx下执行sudo make(需要等几个小时),然后sudo bzImage,结束后,可以看到在当前目录
下生成了一个新的文件:vmlinux,其属性为-rwxr-xr-x。
6.编译模块:还在在当前目录,make modules
安装模块:make modules_install
结束后在/lib/modules下生成xxx(版本号)和xxx-generic这两个目录
7.检测是否成功:
编写一个hello.c测试程序:可以放在/home下自己用户的目录下,如/home/danpi/drive
//hello.c
#include
#include
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
printk(KERN_ALERT "Hello,world\n");
return0;
}
static void hello_exit(void)
{
printk(KERN_ALERT"Goodbye,cruel world\n");
}
module_init(hello_init);
module_exit(hello_exit);
然后编写Makefile,在当前目录下新建Makefile文件
#Makefile
obj-m:=hello.o
KERNELDIR:=/lib/modules/$(shell uname -r)/build
PWD:=$(shell pwd)
modules:
(这里Tab键) $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
注意Makefile中的Tab键
然后在/home/danpi/drive目录下分别执行:
make
insmod hello.c
rmmod hello
但是终端并没有出现hello world等,因为虚拟机的缘故,这些信息已经写入了:/var/log/syslog 中
cat /var/log/syslog即可查看
over~