《Linux 设备驱动开发详解(第2版)》——1.5 Linux设备驱动开发环境构建

简介:

本节书摘来自异步社区《Linux 设备驱动开发详解(第2版)》一书中的第1章,第1.5节,作者:宋宝华著,更多章节内容可以访问云栖社区“异步社区”公众号查看

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

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所示。

screenshot

② 单击“下一步”按钮,如图1.7所示,使用推荐的内存384MB。

screenshot

③ 指定虚拟机磁盘映像为第一步解压缩得到的virtual-disk.vdi,如图1.8所示。

screenshot

④ 完成设置,如图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。

screenshot

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接口。
screenshot

(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 文件,在文件末尾添加:

PATH="$PATH:/usr/local/arm/4.2.2-eabi/usr/bin"
export PATH

使环境变量生效,在终端输入命令:

source /etc/profile

另外,也可以通过修改home目录的.bashrc来将/usr/local/arm/4.2.2-eabi/usr/bin添加到PATH:

export PATH=/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”,显示如下:

Using built-in specs.
Target: arm-unknown-linux-gnueabi
Configured with:
/home/scsuh/workplace/coffee/buildroot-20071011/toolchain_build_arm
/gcc-4.2.2/configure --prefix=/usr --build=i386-pc-linux-gnu --host=i386-pc-linux-gnu
--target=arm-unknown-linux-gnueabi --enable-languages=c,c++ --with-sysroot=/usr/local
/arm/4.2.2-eabi/ --with-build-time-tools=/usr/local/arm/4.2.2-eabi//usr/arm-unknown-linux-
gnueabi/bin --disable-cxa_atexit --enable-target-optspace --with-gnu-ld --enable-shared
--with-gmp=/usr/local/arm/4.2.2-eabi/gmp --with-mpfr=/usr/local/arm/4.2.2-eabi//mpfr
--disable-nls --enable-threads --disable-multilib --disable-largefile --with-arch=armv4t
--with-float=soft --enable-cxx-flags=-msoft-float
Thread model: posix gcc version 4.2.2

说明交叉编译工具链已经安装成功。

ldd6410-debug-tools.tar.gz调试工具包包含了strace、gdbserver和arm-linux-gdb,其中 strace、gdbserver用于目标板文件系统,arm-linux-gdb 运行于主机端,对目标板上的内核、内核模块应用程序进行调试。

下载地址为http://ldd6410.googlecode.com/files/ldd6410-debug-tools.tar.gz,光盘目录为toolchains/ ldd6410-debug-tools.tar.gz。

解压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服务:

sudo apt-get install tftpd-hpa

开启tftp服务:

sudo /etc/init.d/tftpdhpa start
Starting HPA's tftpd: in.tftpd.

对于Ubuntu或Debian用户而言,在主机端可通过如下方法安装nfs服务:

apt-get install nfs-kernel-server
sudo mkdir /home/nfs
sudo chmod 777 /home/nfs

运行“sudo vim /etc/exports”或“sudo gedit /etc/exports”,修改该文件内容为:

/home/nfs *(sync,rw)

运行exportfs rv开启NFS服务:

/etc/init.d/nfs-kernel-server restart

1.5.5 源代码阅读和编辑
源代码是学习Linux的最权威资料,在Windows上阅读Linux源代码的最佳工具是Source Insight,在其中建立一个工程,并将Linux的所有源代码加入该工程,同步这个工程之后,我们将可以非常方便地在代码之间进行关联阅读,如图1.12所示。

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

screenshot

screenshot

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
3天前
|
Web App开发 安全 Linux
FFmpeg开发笔记(二十六)Linux环境安装ZLMediaKit实现视频推流
《FFmpeg开发实战》书中介绍轻量级流媒体服务器MediaMTX,但其功能有限,不适合生产环境。推荐使用国产开源的ZLMediaKit,它支持多种流媒体协议和音视频编码标准。以下是华为欧拉系统下编译安装ZLMediaKit和FFmpeg的步骤,包括更新依赖、下载源码、配置、编译、安装以及启动MediaServer服务。此外,还提供了通过FFmpeg进行RTSP和RTMP推流,并使用VLC播放器拉流的示例。
18 3
FFmpeg开发笔记(二十六)Linux环境安装ZLMediaKit实现视频推流
|
4天前
|
编解码 Linux
FFmpeg开发笔记(二十五)Linux环境给FFmpeg集成libwebp
《FFmpeg开发实战》书中指导如何在Linux环境下为FFmpeg集成libwebp以支持WebP图片编解码。首先,从GitHub下载libwebp源码,解压后通过`libtoolize`,`autogen.sh`,`configure`,`make -j4`和`make install`步骤安装。接着,在FFmpeg源码目录中重新配置并添加`--enable-libwebp`选项,然后进行`make clean`,`make -j4`和`make install`以编译安装FFmpeg。最后,验证FFmpeg版本信息确认libwebp已启用。
14 1
FFmpeg开发笔记(二十五)Linux环境给FFmpeg集成libwebp
|
5天前
|
Linux 芯片
Linux 驱动开发基础知识——查询方式的按键驱动程序_编写框架(十三)
Linux 驱动开发基础知识——查询方式的按键驱动程序_编写框架(十三)
9 2
|
6天前
|
自然语言处理 Ubuntu 编译器
使用 `byacc`(Berkeley Yacc)在Linux中构建编译器
本文介绍了如何在Linux中使用`byacc`构建编译器。首先,通过包管理器安装`byacc`,如在Debian/Ubuntu上使用`apt-get install byacc`,在Red Hat/CentOS/Fedora上使用`yum`或`dnf`。接着,定义编程语言的语法(如示例中的简单计算器`calc.y`),然后运行`byacc -d calc.y`生成C代码。最后,编译生成的文件并运行。虽然示例简单,但展示了使用`byacc`创建编译器的基本步骤,实际项目中需处理更复杂语法和实现语义动作。
|
8天前
|
Linux 数据安全/隐私保护 Windows
linux 搭建cloudreve win映射网络驱动器WebDav
linux 搭建cloudreve win映射网络驱动器WebDav
|
10天前
|
Linux 编解码 Python
FFmpeg开发笔记(二十四)Linux环境给FFmpeg集成AV1的编解码器
AV1是一种高效免费的视频编码标准,由AOM联盟制定,相比H.265压缩率提升约27%。各大流媒体平台倾向使用AV1。本文介绍了如何在Linux环境下为FFmpeg集成AV1编解码库libaom、libdav1d和libsvtav1。涉及下载源码、配置、编译和安装步骤,包括设置环境变量以启用这三个库。
34 3
FFmpeg开发笔记(二十四)Linux环境给FFmpeg集成AV1的编解码器
|
14天前
|
运维 监控 安全
构建高效稳定的Linux服务器:系统优化与安全策略
【5月更文挑战第29天】 在现代IT基础设施中,Linux服务器因其开源性、稳定性和高度可定制的特点而广泛被采用。然而,随着业务需求的不断增长,如何保证Linux服务器的高效稳定运行成为了运维人员必须面对的挑战。本文将深入探讨针对Linux服务器进行系统优化的策略,以及实施有效的安全措施,旨在帮助运维专业人员提升服务器性能,同时确保系统的安全稳定。
|
23天前
|
Web App开发 运维 安全
最全构建属于自己的 Linux 发行版_定制自制linux(3),开发人员必学
最全构建属于自己的 Linux 发行版_定制自制linux(3),开发人员必学
最全构建属于自己的 Linux 发行版_定制自制linux(3),开发人员必学
|
23天前
|
运维 网络协议 Linux
2024年最全CentOS8 Consul微服务架构安装(1)_agent(1),Linux运维开发面试
2024年最全CentOS8 Consul微服务架构安装(1)_agent(1),Linux运维开发面试
|
24天前
|
编解码 Linux 5G
FFmpeg开发笔记(二十)Linux环境给FFmpeg集成AVS3解码器
AVS3,中国制定的第三代音视频标准,是首个针对8K和5G的视频编码标准,相比AVS2和HEVC性能提升约30%。uavs3d是AVS3的解码器,支持8K/60P实时解码,且在各平台有优秀表现。要为FFmpeg集成AVS3解码器libuavs3d,需从GitHub下载最新源码,解压后配置、编译和安装。之后,重新配置FFmpeg,启用libuavs3d并编译安装,通过`ffmpeg -version`确认成功集成。
33 0
FFmpeg开发笔记(二十)Linux环境给FFmpeg集成AVS3解码器