ubuntu下搭建linux驱动开发环境(适合没有开发板的初学者了ubuntu使用入门教程
解⽅法)
对于很多linux开发初学者,⼿⾥没有开发板,但是⼜想练练linux驱动(⼊门级)的同学来说,在虚拟机ubuntu 下搭建⼀个简单的驱动开发环境不失为⼀个很好的选择。
linux驱动正常的开发环境搭建有以下⼏⽅⾯;
1、安装好交叉编译⼯具,⽐如arm-linux-gcc之类的(不同的开发板⼚家时长会提供适合⾃⼰板⼦的交叉编译⼯具)
2、搭建好nfs(为了后边⽅便在虚拟机上挂载⽂件系统,便于板⼦的驱动调试)
3、安装gdb调试⼯具
4、创建linux内核设备树(与⽬标开发板的linux内核版本⼀致,最好使⽤⼚家提供的linux源码树)
5、连接开发板和PC机(⽹线,串⼝....)等等,
6、编写驱动开发环境测试程序,测试编写好的驱动能否在⽬标开发板上运⾏。
7、开始⾃⼰的驱动开发(移植)之旅。
为了简单的了解驱动开发的原理和步骤,以下我们先在虚拟机ubuntu上搭建简单的驱动开发环境。
1、安uild-essential软件包
Ubuntu缺省情况下,并没有提供C/C++的编译环境,因此还需要⼿动安装。幸运的是,为了能够编译Ubuntu的内核,Ubuntu提供了⼀个build-essential软件包
安装⽅法如下:
$sudo apt-get install build-essential
2、到⾃⼰所使⽤ubuntu的软件版本号
uname -r
我⾃⼰的是 3.2.0-23-generic-pae
3、下载源码包
$sudo apt-get  install  linux-source-3.2.0
会默认下载到/usr/src中,cp该⽂件到⾃⼰的⼯作⽬录,当然也可以在本地进⾏解压缩 $sudo tar -jxvf  linux-source-3.2.0.tar.bz2
得到 linux-source-3.2.0 源码包
4、配置内核,进⼊源码包⽬录linux-source-3.2.0,可以使⽤$sudo make oldconfig,然后⼀路回车到结束
5、编译内核使⽤sudo make指令
liufei@liufei-virtual-machine:~/workspace/linux-source-3.2.0$ sudo make
⼤概需要等待的时间⽐较久
期间会报错误 ERROR: "__modver_version_show" [drivers/staging/rts5139/rts5139.ko] undefined,可以使⽤make menuconfig命令在编辑界⾯去
掉rts5139这个选项的选择
6、⽣成和构建设备树 $make modules, $make modules_install两条指令结束后在/lib/modules下⽣成xxx(版本号)和xxx-generic-pae这两个⽬录
7、然后就是写代码测试了
测试代码test.c
//test.c
#include<linux/init.h>
#include<linux/module.h>
MODULE_LICENSE("GPL");
static int test_init(void)
{
printk(KERN_ALERT "Hello,world\n");
return0;
}
static void test_exit(void)
{
printk(KERN_ALERT"Goodbye,cruel world\n");
}
module_init(test_init);
module_exit(test_exit);
makefile
obj-m:=test.o
KERNELDIR:=/lib/modules/$(shell uname -r)/build
PWD:=$(shell pwd)
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
将代码cp到虚拟机上make编译⽣成test.ko⽂件
然后$insmod test.ko加载驱动
$lsmod 就可以在驱动列表⾥边看到刚才加载的驱动了
要卸载这个驱动使⽤$rmmod  test命令就可以
以上我们搭建了⼀个初级的驱动开发环境,完成了驱动开发的基本体验,要进⾏真正的驱动开发(移植),还有许多功课要做的。