当前位置:文档之家› 编译hello设备驱动程序详细过程

编译hello设备驱动程序详细过程

编译hello world设备驱动程序详细过程
1、安装与你的开发板相同的内核版本的虚拟机,我的板子内核是2.6.8.1,虚拟机是2.6.9,
一般是虚拟机的内核只能比板子内核新,不能旧
#uanme –a [1](在任何目录下,输入此命令,查看虚拟机的内核版本,我的内核版本是2.6.9) 2、在虚拟机上设置共享目录,我的共享目录在linux下的/mnt/hgfs/share [2]share是自己命名的,我的物理机上,即Windows下的目录是G:/share,
3、在Windows下,把开发板的的交叉开发工具链[3],内核源码包[4],复制到物理机的共享目录下[5] 即Windows下的目录是G:/share,
4、#cp /mnt/hgfs/share/cross-3.3.2.tar.bz2 /usr/local/arm [6] 在Linux下,把交叉工具链,复制到/usr/local/arm目录下
5、#cd /usr/local/arm
6、#tar jxvf cross-3.3.2.tar.bz2 [7] 并在当前目录/usr/local/arm下解压它cross-2.95.3.tar.bz2和gec2410-linux-2.6.8.tar.bz2也是用同样的命令去解压
7、#export PATH=/usr/local/arm/3.3.2/bin:$PATH [8] 安装交叉工具链,在需要使用交叉编译时,只要在终端输入如下命令
#export PATH=/usr/local/arm/版本/bin:$PATH
即可,在需要更改不同版本的工具链时,重新启动一个终端,然后再一次输入上面的命令即可,使用哪个版本的交叉工具链,视你要编译的内核版本决定,编译2.4版本的内核,则用2.95.3版本的交叉工具链,而2.6版本内核的,则要用3.3.2版本的交叉工具链。

8、#cp gec2410-linux-2.6.8.tar.bz2 /root [9]把内核拷贝到/root目录下,
9、#cd /root
10、#tar gec2410-linux-2.6.8.tar.bz2 [10] 在/root解压开发板的内核源码压缩包gec2410-linux-2.6.8.tar.bz2,得到gec2410-linux-2.6.8.1文件夹
11、#cd /root/ gec2410-linux-2.6.8.1
12、#cp gec2410.cfg .config [11] gec2410.cfg文件是广嵌开发板提供的默认内核配置文件,在这里首先把内核配置成默认配置,然后在此基础上用make menuconfig进一步配置,但在这里,不进行进一步的配置,对于内核配置,还需要看更多的知识,在这里先存疑。

13、#make [12]在内核源代码的根目录gec2410-linux-2.6.8.1下用make命令编译内核,注意,先安装交叉工具链,再编译内核,因为这里编译的hello.ko驱动模块最终是下载到开发板上运行的,而不是在虚拟机的Linux系统运行的,如果是为了在虚拟机的Linux系统运行的,则不用安装交叉编译工具链arm-linux-gcc,而直接用gcc,用命令#arm-linux-gcc –v 可以查看当前已经安装的交叉编译工具链的版本。

这里编译内核不是为了得到内核的映象文件zImage(虽然会得到内核的映象文件zImage),而是为了得到编译hello.o模块需要相关联,相依赖(depends on)的模块。

14、#cd /root
12、#mkdir hello [13]在/root目录下建立hello文件夹,
13、#cd hel
14 、#vi hello.c [12]编辑hello.c文件,内容是《Linux设备驱动程序》第三版22页的hello world程序。

15、#vi Makefile [13]在hello文件夹下编辑Makefile文件,
16、obj-m := module.o [14] 这是Makefile的内容,为obj-m := module.omodule.o视你编辑的.c文件而定,这里则要写成hello.o,写完后,保存退出。

17、cd /root/hello
18、make –C /root/ gec2410-linux-2.6.8.1/ M=$(pwd) modules [15]在设备驱动程序.c 文件所在的目录下用make命令,make Makefile文件,则在此文件夹下,生成.ko文件,此处为hello.ko文件。

当然Makefile文件有很多种写法,所以学好设备驱动,要更进一步学习。

19、cp hello.ko /work [16]/work为与板子的NFS共享文件夹。

把hello.ko复制到共享文件夹下,则可以在板子上安装了。

开启虚拟机的LINUX下,开启portmat ,nfs服务,打开minicom,切换到板子的终端,在板子的终端输入如下命令:
21、cd /tmp [17] /tmp是挂载了虚拟机Linux的nfs共享文件夹/work的文件夹
22、insmod hello.ko [18]
此时会打印一些“hello world”的消息到板子的终端上
23、rmmod hello [19]卸载设备驱动模块时,可以不带.ko。

相关主题