本节书摘来自异步社区《linux 设备驱动开发详解(第2版)》一书中的第1章,第1.5节,作者:宋宝华著,更多章节内容可以访问云栖社区“异步社区”公众号查看
linux 设备驱动开发详解(第2版)
1.5.1 pc上的linux环境
本书配套光盘提供了一个ubuntu的virtualbox虚拟机映像,该虚拟机上安装了所有本书涉及的源代码、工具链和各种开发工具,读者无需再安装和配置任何环境。该虚拟机可运行于windows等操作系统中,运行方法如下。
(1)解压缩安装盘内的虚拟机磁盘映像virtual-disk.rar到本地硬盘得到virtual-disk.vdi(至少需要16gb的空闲磁盘空间)。
(2)安装安装盘内的virtualbox虚拟机软件。
(3)建立一个虚拟机。
① 单击“新建”按钮,指定虚拟机使用linux ubuntu系统,如图1.6所示。

② 单击“下一步”按钮,如图1.7所示,使用推荐的内存384mb。
③ 指定虚拟机磁盘映像为第一步解压缩得到的virtual-disk.vdi,如图1.8所示。
④ 完成设置,如图1.9所示。
之后就可以启动虚拟机,账号和密码都是“lihacker”。本书配套源代码都位于lihacker主目录的develop目录下,几个主要项目针对/home/lihacker/develop/的子目录如下。
ldd6410开发板内核源代码:svn/ldd6410-2-6-28-read-only/linux-2.6.28-samsung。
ldd6410开发板u-boot源代码:svn/ldd6410-read-only/s3c-u-boot-1.1.6。
ldd6410开发板文件系统用的busybox、jpegview、mplayer、appweb等:svn/ldd6410-read- only/utils。
ldd6410开发板及常用linux用户空间驱动测试程序:svn/ldd6410-read-only/tests。
书中globalmem、globalfifo等驱动实例:svn/ldd6410-read-only/training/kernel。
android的源代码:git/myandroid。
ndk:android-ndk-r3。
eclipse:单击桌面上的“android-eclipse”图标,即可运行附带adt的eclipse开发工具。
1.5.2 ldd6410开发板
ldd6410是本书专配的一款高端arm11处理器开发板(其结构如图1.10所示,实物如图1.11所示),采用三星公司最新推出s3c6410处理器,芯片拥有强大的内部资源和视频处理能力,板上集成了丰富的外围接口,其主要特点如下。
(1)运行于533mhz的arm11处理器(最高主频可达到667mhz)。
(2)运行于266mhz的ddr内存,128mb。
(3)1mb nor flash。
(4)256mb nand flash。
(5)wm9714 ac97声卡。
(6)vga输出接口(可达1024×768@60hz)。
(7)tv输出接口。
(8)usb 2.0 otg接口及usb 1.1 host接口。
(9)sd/sdio接口,支持sd卡和sdio设备。
(10)dm9000百兆网卡。
(11)4.3寸lcd(分辨率为480×272)、触摸屏。
(12)s3c6410芯片内嵌图形加速,jpeg、多媒体编解码。
(13)6个gpio按键。
(14)可扩展camera、wifi、3g modem等模块。
(15)可扩展外部矩阵键盘。
配套电路板提供了如下软件。
(1)工具链:提供了arm-linux-gcc、arm-linux-gdb、gdbserver、strace用于android开发的eclipse(带adt插件)、jdk和ndk。
(2)u-boot:u-boot源代码包含独立的ldd6410文件,支持从sd卡、nand启动,支持dm9000网卡引导。
(3)linux内核、bsp和驱动:linux 2.6.28内核、源代码,包含独立的ldd6410 bsp和完整的设备驱动。
(4)文件系统:基于新版busybox 1.15.1,文件系统集成jpegview、mplayer、appweb等大量应用,集成了按键、鼠标、触摸屏、lcd等测试程序,作为驱动的用户应用案例。
(5)android:提供android源代码和文件系统、内核电源管理补丁源代码、内核android驱动源代码。ldd6410的android系统支持按键、触摸屏和鼠标操作,支持使用lcd和vga进行显示。
(6)qt:ldd6410支持qt/embedded 4.5.3,移植了ts_lib和tslib, ts_calibration,支持使用触摸屏进行操作。
ldd6410支持从sd卡或nand启动,通过电路板上的sw1可设置ldd6410的启动模式。从sd卡启动设备为全on;从nand启动时,将1、2设置为on,3、4设置为off。
ldd6410开发板的详细使用方法,请见配套光盘中的“ldd6410开发板用户手册”。
1.5.3 工具链安装
本书配套光盘的虚拟机映像中已经安装好了ldd6410的工具链,ldd6410开发板工具链为s3c6410x-toolchain4.2.2-eabi-v0.0-cross-4.2.2-eabi.tar。安装步骤如下。
(1)解压上述工具链获得文件夹:4.2.2-eabi/。
(2)在/usr/local/下面创建目录 arm/(注意,最好是放到这个目录,不然在以后的编译过程中可能出现一些错误)。
(3)将目录 4.2.2-eabi/移动到/usr/local/arm/下面。
(4)设置环境变量。
编辑/etc/profile 文件,在文件末尾添加:
使环境变量生效,在终端输入命令:
另外,也可以通过修改home目录的.bashrc来将/usr/local/arm/4.2.2-eabi/usr/bin添加到path:
(5)测试环境变量是否设置成功。
在终端输入:echo $path,如果输出的路径中包含了/usr/local/arm/4.2.2-eabi/usr/bin,则说明环境变量设置成功。
(6)测试交叉编译工具链。
在终端输入“arm-linux-gcc –v”,显示如下:
说明交叉编译工具链已经安装成功。
ldd6410-debug-tools.tar.gz调试工具包包含了strace、gdbserver和arm-linux-gdb,其中 strace、gdbserver用于目标板文件系统,arm-linux-gdb 运行于主机端,对目标板上的内核、内核模块应用程序进行调试。
解压ldd6410-debug-tools.tar.gz,将其中的arm-linux-gdb放入主机上arm-linux-gcc所在的目录/usr/local/arm/4.2.2-eabi/usr/bin/。
而 strace、gdbserver则可根据需要放入目标机根文件系统的/usr/sbin目录。
1.5.4 主机端nfs和tftp服务安装
本书配套光盘的虚拟机映像中已经安装好了nfs和tftp,ldd6410可使用tftp或nfs文件系统与主机通过网口交互。如果用户想在其他环境下自行安装,对于ubuntu或debian用户而言,在主机端可通过如下方法安装tftp服务:
开启tftp服务:
对于ubuntu或debian用户而言,在主机端可通过如下方法安装nfs服务:
运行“sudo vim /etc/exports”或“sudo gedit /etc/exports”,修改该文件内容为:
运行exportfs rv开启nfs服务:
1.5.5 源代码阅读和编辑
源代码是学习linux的最权威资料,在windows上阅读linux源代码的最佳工具是source insight,在其中建立一个工程,并将linux的所有源代码加入该工程,同步这个工程之后,我们将可以非常方便地在代码之间进行关联阅读,如图1.12所示。
在linux主机上阅读和编辑linux源码的常用方式是vim + cscope或者vim + ctags,vim是一个文本编辑器,而cscope和ctags则可建立代码索引,建议读者尽快使用基于文本界面全键盘操作的vim编辑器,如图1.13所示。