开发者社区> 华章计算机> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

《Linux设备驱动开发详解 A》一一1.5 Linux设备驱动的开发环境构建

简介:
+关注继续查看

本节书摘来华章计算机出版社《Linux设备驱动开发详解 A》一书中的第1章,第1.5节,作者:宋宝华 更多章节内容可以访问云栖社区“华章计算机”公众号查看。1

1.5 Linux设备驱动的开发环境构建

1.5.1 PC上的Linux环境
本书配套资源提供了一个Ubuntu的VirtualBox虚拟机映像,该虚拟机上安装了本书涉及的所有源代码、工具链和各种开发工具,读者无须再安装和配置任何环境。该虚拟机可运行于Windows、Ubuntu等操作系统中,运行方法如下。
1)安装VirtualBox。
如果主机为Windows系统,请安装VirtualBox WIN版本:
VirtualBox-4.3.20-96997-Win.exe
如果主机为Ubuntu系统,请安装VirtualBox DEB版本:
virtualbox-4.3_4.3.20-96996~Ubuntu~precise_i386.deb
2)安装VirtualBox extension。
Oracle_VM_VirtualBox_Extension_Pack-4.3.20-96996.vbox-extpack
3)准备虚拟机镜像。
解压Baohua_Linux.vmdk.rar为Baohua_Linux.vmdk
4)新建虚拟机。
运行第1步安装的Oracle VM VirtualBox,单击“新建(N)”图标创建虚拟机,“类型”选择Linux,“版本”选择Ubuntu(32 bit),名称可以取名为“linux-training”,如图1.6所示。
image

图1.6?新建Ubuntu 32位虚拟机
单击“下一步(N)”按钮,设置内存,如图1.7所示。
image

图1.7?设置虚拟机的内存
继续单击“下一步(N)”按钮。设置硬盘,注意选择“使用已有的虚拟硬盘文件(U)”单选按钮,虚拟硬盘文件是第3步解压之后的“Baohua_Linux.vmdk”,如图1.8所示。
image

图1.8?设置虚拟机硬盘镜像
最后,单击“创建”按钮以完成虚拟机的构建工作。
5)启动虚拟机。
在VirtualBox上选择先前创建的“linux-training”虚拟机并单击“启动”图标,如图1.9所示。
image

图1.9?启动虚拟机
虚拟机的账号和密码都是“baohua”,如果要执行特权命令,sudo密码也是“baohua”,如图1.10所示。
image

图1.10?虚拟机登录界面
本书配套的Ubuntu版本是14.04,但是内核版本升级到了4.0-rc1,以保证和本书讲解内容的版本一致。
注意事项:
如果发现VirtualBox不稳定或者有兼容性问题(经过测试,有极少数PC存在此问题),也可以安装VMware(Baohua_Linux.vmdk也是支持VMware的)。
如果光盘不小心损坏,可以从链接: http://pan.baidu.com/s/1c08gzi4(密码为 puki)处提取网盘上的文件。
1.5.2 QEMU实验平台
QEMU模拟了vexpress Cortex-A9 SMP四核处理器开发板,板上集成了Flash、SD、I2C、LCD等。ARM公司的Versatile Express系列开发平台提供了超快的环境,用于为下一代片上系统设计方案建立原型,比如 Cortex-A9 Quad Core。
http://www.arm.com/zh/products/tools/development-boards/versatile-express/index.php上可以发现更多关于Versatile Express系列开发平台的细节。
本书配套虚拟机映像中已经安装好了工具链,包含arm-linux-gnueabihf-gcc和arm-linux-gnueabi-gcc两个版本。
Linux内核在/home/baohua/develop/linux目录中,在该目录下面,包含内核编译脚本:

export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabi-
make LDDD3_vexpress_defconf?ig
make zImage -j8 
make modules -j8 
make dtbs
cp arch/arm/boot/zImage extra/
cp arch/arm/boot/dts/*ca9.dtb   extra/
cp .conf?ig extra/

由此可见,我们用的默认内核配置文件是LDDD3_vexpress_defconfig。上述脚本也会自动将编译好的zImage和dtbs复制到extra目录中。
extra目录下的vexpress.img是一张虚拟的SD卡,将作为根文件系统的存放介质。它能以loop的形式被挂载(mount),譬如在/home/baohua/develop/linux目录下运行。
sudo mount -o loop,offset=$((2048*512)) extra/vexpress.img extra/img
可以把vexpress.img的根文件系统分区挂载到extra/img,这样我们可以在目标板的根文件系统中放置我们喜欢的内容。
/home/baohua/develop/linux目录下面有个编译模块的脚本module.sh,它会自动编译内核模块并安装到vexpress.img中,其内容如下:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- modules
sudo mount -o loop,offset=$((2048*512)) extra/vexpress.img extra/img
sudo make ARCH=arm modules_install INSTALL_MOD_PATH=extra/img
sudo umount extra/img
运行extra下面的run-nolcd.sh可以启动一个不含LCD的ARM Linux。run-nolcd.sh的内容为qemu-system-arm -nographic -sd vexpress.img -M vexpress-a9 -m 512M -kernel zImage -dtb vexpress-v2p-ca9.dtb  -smp 4 -append "init=/linuxrc root=/dev/mmcblk0p1 rw rootwait earlyprintk console=ttyAMA0" 2>/dev/null,运行结果为:
baohua@baohua-VirtualBox:~/develop/linux/extra$ ./run-nolcd.sh 
Uncompressing Linux... done, booting the kernel.
Booting Linux on physical CPU 0x0
Initializing cgroup subsys cpuset
Linux version 3.16.0+ (baohua@baohua-VirtualBox) (gcc version 4.7.3 (Ubuntu/
        Linaro 4.7.3-12ubuntu1) ) #3 SMP Mon Dec 1 16:53:04 CST 2014
CPU: ARMv7 Processor [410fc090] revision 0 (ARMv7), cr=10c53c7d
CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
Machine model: V2P-CA9
bootconsole [earlycon0] enabled
Memory policy: Data cache writealloc
PERCPU: Embedded 7 pages/cpu @9fbcd000 s7232 r8192 d13248 u32768
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 130048
Kernel command line: init=/linuxrc root=/dev/mmcblk0p1 rw rootwait earlyprintk 
        console=ttyAMA0
PID hash table entries: 2048 (order: 1, 8192 bytes)
Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
Memory: 513088K/524288K available (4583K kernel code, 188K rwdata, 1292K rodata, 
        247K init, 149K bss, 11200K reserved)
Virtual kernel memory layout:
    vector  : 0xffff0000 - 0xffff1000   (   4 kB)
    f?ixmap  : 0xffc00000 - 0xffe00000   (2048 kB)
    vmalloc : 0xa0800000 - 0xff000000   (1512 MB)
    lowmem  : 0x80000000 - 0xa0000000   ( 512 MB)
    modules : 0x7f000000 - 0x80000000   (  16 MB)
      .text : 0x80008000 - 0x805c502c   (5877 kB)
      .init : 0x805c6000 - 0x80603c40   ( 248 kB)
      .data : 0x80604000 - 0x80633100   ( 189 kB)
       .bss : 0x80633108 - 0x806588a8   ( 150 kB)
SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1
Hierarchical RCU implementation.
    RCU restricting CPUs from NR_CPUS=8 to nr_cpu_ids=4.
RCU: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=4
NR_IRQS:16 nr_irqs:16 16
L2C: platform modif?ies aux control register: 0x02020000 -> 0x02420000
L2C: device tree omits to specify unif?ied cache
L2C: DT/platform modif?ies aux control register: 0x02020000 -> 0x02420000
L2C-310 enabling early BRESP for Cortex-A9
L2C-310 full line of zeros enabled for Cortex-A9
L2C-310 dynamic clock gating disabled, standby mode disabled
L2C-310 cache controller enabled, 8 ways, 128 kB
L2C-310: CACHE_ID 0x410000c8, AUX_CTRL 0x46420001
smp_twd: clock not found -2
sched_clock: 32 bits at 24MHz, resolution 41ns, wraps every 178956969942ns
Console: colour dummy device 80x30
…

运行extra下面的run-lcd.sh可以启动一个含LCD的ARM Linux,运行结果如图1.11所示。
image

图1.11 含LCD的ARM Linux
除了QEMU模拟的ARM电路板以外,本书配套的Ubuntu中还包含一些直接可以在Ubuntu上运行的案例,譬如/home/baohua/develop/training/kernel中就包含了globalfifo、globalmem等,这些目录的源代码都包含了Makefile,在其中直接make,生成的.ko可以直接在Ubuntu上运行。
1.5.3 源代码阅读和编辑
源代码是学习Linux的权威资料,在Windows上阅读Linux源代码的最佳工具是Source Insight,在其中建立一个工程,并将Linux的所有源代码加入该工程,同步这个工程之后,我们将能非常便捷地在代码之间进行关联阅读,如图1.12所示。
类似http://lxr.free-electrons.com/http://lxr.oss.org.cn/这样的网站提供了Linux内核源代码的交叉索引,在其中输入Linux内核中的函数、数据结构或变量的名称就可以直接得到以超链接形式给出的定义和引用它的所有位置。还有一些网站也提供了Linux内核中函数、变量和数据结构的搜索功能,在google中搜索“linux identifier search”可得。
image

图1.12 在Source Insight中阅读Linux源代码
在Linux主机上阅读和编辑Linux源码的常用方式是vim + cscope或者vim + ctags,vim是一个文本编辑器,而cscope和ctags则可建立代码索引,建议读者尽快使用基于文本界面全键盘操作的vim编辑器,如图1.13所示。
image

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
快速配置Linux + Eclipse + wxWidgets开发环境
本文为原创,如需转载,请注明作者和出处,谢谢!     wxWidgets是一个跨平台的C++开发库,与MFC类似。不过配置起来比较麻烦,如果在Linux下使用Eclipse来开发基于wxWidgets的应用程序需要进行一系列的配置,如设置include路径、library路径等。
799 0
『Kubernetes』Linux安装K8S集群过程笔记
📣读完这篇文章里你能收获到 - K8S安装全过程 - 博主自己实操笔记带你跳过所有坑
21 0
Linux centOs7.0安装宝塔面板(保姆级教程)
Linux centOs7.0安装宝塔面板保姆级教程。
18 0
在Linux上明明用rpm成功安装了软件,在卸载时却提示未安装
在Linux上明明用rpm成功安装了软件,在卸载时却提示未安装
69 0
为何安装要先安装windows后安装linux_学习笔记。
时间:2017.12.21作者:李强参考:man,info,magedu讲义,万能的internet实验环境:VMware® Workstation 12 Pro ,Centos 6.9,Centos 7.4,SecureCRT Version 8.1.4声明:以下英文纯属个人翻译,英文B级,欢迎纠正,以下内容纯属个人理解,并没有对错,只是参考,盗版不纠,才能有限,希望不误人子弟为好。
642 0
​Linux下的Memcache安装
Linux下的Memcache安装 发布时间:December 6, 2007 分类:Linux,Memcache 《IBM T61 A29入手》 《Windows下的Memcache安装》 最近在研究怎么让Discuz!去应用Memcache去做一些事情,记录下Memcache安装的过程。
929 0
linux安装苹果
用惯了Win7的字体,感觉雅看着很舒服,就动手在Linux安装下,简单描述下:第一步:百度一下,找到微软雅黑字体(.ttf)下载第二步:把下载的字体放到cd /usr/share/fonts/zh_CN目录下没有的话创建 mkdir /usr/share/fonts zh_CN 复制代...
818 0
阿里云监控 Linux Agent安装
阿里云监控 Linux Agent安装 安装 直接复制以下命令后在服务器上使用 root 权限运行即可。 64位 sudo bash -c "wget -e 'http_proxy=hzcmsproxy.
1165 0
Linux安装weblogic服务
Linux安装weblogic服务 一、环境准备: Linux系统 jdk-7u75-linux-x64.tar.gz(http://pan.baidu.com/s/1kTh5Vx1) wls1212_dev.zip(http://pan.baidu.com/s/1nttDkq1) 二、安装步骤: 1、首先创建weblogic用户、用户组并设置主目录 [root@localhost ~]# useradd -d /weblogic weblogic [root@localhost ~]# passwd weblogic 更改用户 weblogic 的密码。
1971 0
linux安装苹果
用惯了Win7的字体,感觉雅看着很舒服,就动手在Linux安装下,简单描述下:第一步:百度一下,找到微软雅黑字体(.ttf)下载第二步:把下载的字体放到cd /usr/share/fonts/zh_CN目录下没有的话创建 mkdir /usr/share/fonts zh_CN 复制代...
550 0
10057
文章
0
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载