arm嵌入式项目实战开发
随着超大规模集成电路的发展,计算机处理器技术不断进步,计算机芯片处理能力更强,体积更小,计算机技术应用到生活的各个方面。嵌入式系统是人们日常生活中最常见的,从广泛使用的手机、MP3播放器到家用电器,嵌入式系统随处可见。嵌入式系统开发在整个计算机系统开发中所占的比例越来越大。嵌入式系统开发不同于传统的PC程序开发,嵌入式系统开发涉及软件和硬件的开发,是一个共同工作的统一体。目前嵌入式系统硬件和操作系统软件有很多,其中应用最广泛的是ARM嵌入式处理器和Linux系统。目前市面上关于嵌入式开发的书籍大多是针对某一特定领域编写的,专业性和针对性很强,并不适合初学者学习。为此,作者写了这本书。本书是“Linux典藏系列”中《ARM嵌入式Linux系统开发详解》的第二版,受到了很多读者的好评。 本书在第一版的基础上进行了全面改版,升级了编程环境,修订了第一版的一些疏漏,重新阐述了书中的一些实例和代码,使其更加易于阅读。相信读者在本书的指导下,能够踏入嵌入式开发的大门。关于“Linux经典典藏系列丛书” “Linux经典典藏系列丛书”是清华大学出版社于2010年1月推出的丛书,截止2012年,已出版10余本。
本系列图书涵盖了Linux技术的方方面面,能满足各个层次、各个领域的读者学习Linux技术的需求。自出版以来,本系列图书受到读者的热烈好评,成为Linux图书市场上最耀眼的明星品牌之一,其销量在同类图书中也名列前茅,部分图书还荣获了“51CTO读书频道”颁发的“最受欢迎原创IT技术图书奖”。在出版过程中,本系列图书还得到了国内Linux领域最知名的技术社区ChinaUnix(CU)的大力支持和帮助,读者就图书内容与活跃在CU社区的Linux技术爱好者进行了广泛的交流,取得了良好的学习效果。关于本书第二版本书第一版出版后,受到了读者的一致好评,并得到了ChinaUnix技术社区的大力推荐。但随着技术的发展,本书第一版的内容已经不能满足读者的学习需求。 应读者的要求,我们结合嵌入式技术的最新发展,推出了本书的第二版。与第一版相比,第二版内容的变化主要体现在以下几个方面:(1)Linux开发环境由Ubuntu 8.04升级到12.04。(2)更新了Cygwin、ADS、GCC等相关软件。(3)修订了一些术语和术语不一致的地方。(4)删除了一些过时的内容,如Ubuntu网络配置。
(5)对完整的实例代码添加了行号,方便读者阅读。 (6)修正了部分函数解释错误,修正了部分代码类型转换问题。 (7)将部分不准确的表述表达得更加准确。 本书特点 1.循序渐进,由浅入深 为了让初学者能够快速进入嵌入式系统开发领域,本书从嵌入式系统的软件、硬件等方面进行全面介绍,让读者对嵌入式系统有一个基本的了解。同时,书中讲解的知识点都配有完整的实例,读者可以通过实例学习嵌入式系统开发的相关知识。 2.技术全面,内容丰富 作者从事嵌入式系统开发多年,对嵌入式系统开发的各个环节都有很深的了解。在本书中,对嵌入式Linux开发的各个关键点进行了讲解,包括Linux内核的组成、工作流程、驱动开发、文件系统、程序库等知识,让读者能够充分了解嵌入式Linux开发的各个知识点。 3.实例讲解,深入理解 关于嵌入式Linux开发的书很多,很多书都侧重于理论。本书所有实例都经过作者验证,有详细的操作流程和实验结果。其次,本书的操作实例都有完整的实验环境描述,读者可以通过实例加深对知识点的理解。 4.化整为零,深入剖析 嵌入式系统开发涉及的知识面很广,技术也很复杂。本书剥开茧子,力求找到开发过程中的关键知识点。从关键点出发,通过简单易懂的实例剖析技术原理,帮助读者掌握复杂的技术。
5.典型项目案例开发详解,提升实践技能 本书对DM9000网卡驱动、NAND Flash设备驱动以及USB驱动的实现进行了详细的分析,通过这三个项目案例,让读者能够提升自己的设备驱动开发水平,具备独立开发驱动的能力。 6.提供多媒体教学视频及源文件 本书专门提供了9个小时的多媒体教学视频和例子源文件,方便读者高效、直观的学习,读者需要按照封面上的指示下载这些学习资料。 本书内容体系 第1部分 Linux嵌入式开发基础(第1至6章) 这部分内容主要包括嵌入式系统简介、嵌入式软硬件系统、ARM处理器、嵌入式Linux、软件开发环境的建立以及第一个Linux应用。通过这部分的学习,读者可以掌握Linux嵌入式开发环境的搭建以及Linux嵌入式的基础知识。 第二部分 Linux嵌入式开发应用(第7章至第12章) 本部分内容主要包括Linux应用程序编程基础、多进程/线程程序开发、网络通信应用程序、串口通信编程、嵌入式GUI程序开发和软件项目管理等内容。通过本部分的学习,读者可以掌握Linux嵌入式的核心技术及应用。 第三部分 Linux系统(第13章至第21章) 本部分内容主要包括ARM体系结构及开发实例、Bootloader的深入、Linux内核的分析、嵌入式Linux的启动过程、Linux文件系统、交叉编译工具链的建立、命令系统BusyBox、Linux内核的移植以及内核和应用程序的调试技术等。
通过本文的学习,读者可以对Linux系统从内核到文件系统到启动过程有一个非常清晰的认识。 第四章 Linux嵌入式驱动开发(第22-25章) 本文的主要内容包括Linux设备驱动、网络设备驱动、Flash设备驱动、USB驱动开发等。通过本文的学习,读者可以掌握Linux嵌入式开发的基本流程和思路。 本书的读者对象为 * Linux嵌入式开发初学者; * 需要系统学习Linux嵌入式开发的人士; * Linux嵌入式从业人员; * Linux嵌入式开发爱好者; * 大专院校学生; * 社会培训班学生。 本书作者 本书由龚磊编写。 参加撰写的其他人员有吴振华、辛立伟、熊新奇、徐斌、闫静娴、杨光磊、杨艳玲、姚志娟、余静蕾、张建辉、张建、张林、张迎春、张志超、赵红梅、赵永远、钟从浩、周建珍、杨文达。本书编委会成员有区振旭、陈杰、陈冠军、徐玉峰、张帆、陈刚、程彩虹、毛红娟、聂庆良、王志娟、吴文娟、闫萌萌、姚志娟、尹继平、张昆、张雪。 如果您在阅读本书过程中有任何问题,可以发邮件至book@wanjuanchina.net或bookservice2008@163。 com 寻求帮助。 您也可以在论坛上留言,会有人负责解答您的问题。
更多 >
嵌入式Linux系列第5篇:Nand Flash根文件系统制作
1.引言
之前系列的文章介绍了如何编译Uboot、Kernel以及使用默认的ramdisk根文件系统来构建一个完整的嵌入式Linux系统,本篇文章介绍如何从头制作一个放在NAND Flash上的根文件系统。经过我这段时间的总结,rootfs相关的编译、配置等工作还是比较麻烦的。所以你可能会看到一般做核心板的第三方厂家会建议初学者直接使用现成提供的文件系统,比如一个做NUC972核心板的厂家,其文档里这么描述:
再比如另外一个做NXP I.MX6核心板的厂家,其文档里这么描述:
他们都建议初学者直接使用他们提供好的文件系统。但是我还是强烈建议大家自己一步一步的去操作制作一次,因为一是这有助于你理解根文件系统是怎么来的,最小的能用的根文件系统包含了哪些东西,二是将来你很有可能需要对文件系统做一些定制化的裁剪和修改工作,只有自己做了一遍你对会明白这个东西到底是怎么回事,比如我原来就搞不清楚Busybox、Buildroot、Yocto这些名词在Linux中的作用,现在随着实践增多,就大概知道他们的用处了。
2.环境介绍
2.1.硬件
因为本系列博客都会以NUC972为平台来介绍。
2.2.软件
本篇新用到的软件工具一个是busybox,它用来生成文件系统里的几个最基本的文件夹,二是打包工具mkyaffs2,它用来生成能直接烧录到板子里的镜像文件。
大家有没有注意,我为什么每次都把这个官方的链接放过来,让大家自己去下载,原因是我们要知道我们用的东西的源头在哪里,最官方的资料渠道在哪里,这很重要。
我们这次要实现的目标是:自己亲手制作的文件系统能够跑起来,同时能够运行我们第二篇文章介绍的Helloworld程序。
3.使用Busybox制作根文件系统
1)进入到nuc972文件夹,新建一个tool文件夹,用来存放busybox、mkyaffs2等工具,把上面下载的NUC970_Linux_Applications-master.zip文件解压到tool文件夹里,因为解压后含有NUC970_Linux_Applications-master,我们把里面的内容移出来,然后删除掉空的NUC970_Linux_Applications-master文件夹和NUC970_Linux_Applications-master.zip源文件。然后进入到busybox目录里。同样的,在编译前要设置交叉编译的环境变量。
cd ~/nuc972
mkdir tool
unzip NUC970_Linux_Applications-master.zip
cd NUC970_Linux_Applications-master
mv ./* ../
cd ..
rm NUC970_Linux_Applications-master -fr
rm NUC970_Linux_Applications-master.zip
cd busybox-1.22.1/
source ~/nuc972//toolchain/environment.sh
2)make menuconfig 进入配置界面
make menuconfig
我们这里就设置一个地方,其他的全部使用默认配置。
修改make install生成的文件夹路径,我们把默认的./_install改成nuc972目录下的rootfs。
Busybox Settings --->
Installation Options ("make install" behavior) --->
(../../rootfs) BusyBox installation prefix
3)make 编译
make
编译成功后显示如下:
编译完成之后我们可以查看一下busybox的文件属性,可以看到如下信息,说明我们交叉编译的没问题。
4)make install 安装
make install
这样就在前面我们设置的地方生成一个rootfs的文件夹,进到里面看一下
cd ~/nuc972/rootfs
ls
bin、sbin、usr :存放一些命令
linuxrc :挂载根文件系统时,第一个执行的文件
4)再创建几个文件夹
mkdir etc lib dev
5)在 rootfs 目录的dev目录下创建设备节点
cd dev
sudo mknod console c 5 1
sudo mknod null c 1 3
6)在根文件系统rootfs/etc目录下创建一个inittab 文件,在文件里面填写:.console::askfirst:-/bin/sh
cd ../etc
vim inittab
4.文件系统打包
1)进入到tool文件夹的yaffs2utils目录里
cd yaffs2utils
2)编译,生成mkyaffs2
make clean
make
注:编译这个工具,不需要修改Makefile,用file看下属性,它是在x86-64运行的,这是没问题的,因为它就是在Ubuntu下使用的,不是在嵌入式环境下去执行使用的。
将它复制到/usr/bin下以后用起来方便了,可以直接使用这个指令了,你可一在终端敲mkya,然后TAB建看不能出来。
sudo cp mkyaffs2 /usr/bin/
4) 生成文件系统
sudo mkyaffs2 --inband-tags -p 2048 rootfs rootfs_yaffs2.img
5.内核修改
内核也要做一定的修改,具体如下:
1)make menuconfig进入到内核配置界面
make menuconfig
2)默认用的RAM filesytem 需要去掉
General setup —>
[ ] Initial RAM filesystem and RAM disk (initramfs/initrd) support
3)默认的Boot option需要修改成如下:
Boot options --->
(noinitrd root=/dev/mtdblock2 rootfstype=yaffs2 rootflags=inband-tags console=ttyS0,115200n8 rdinit=/sbin/init mem=64M)
4)NAND Flash驱动相关配置
Device Drivers --->
Generic Driver Options --->
<*> Nuvoton NUC970 FMI function selection
Select FMI device to support (Support MTD NAND Flash) --->
5)选中MTD的支持
Device Drivers --->
<*> Memory Technology Device (MTD) support --->
<*> Caching block device access to MTD devices
-*- NAND Device Support --->
-*- Nuvoton NUC970 MTD NAND --->
NUC970 NAND Flash pin selection (Port C) --->
6)选中yaff2文件系统的支持
File systems --->
[*] Miscellaneous filesystems --->
<*> yaffs2 file system support
7)保存配置,编译
6.结果查看
6.1.验证文件系统是否可用
1)将上述生成的kernel 970uimage、文件系统rootfs_yaffs2.img、还有之前第三讲生成的uboot.bin,uboot-spl.bin,以及env.txt 下载到板子里,env.txt做了一些改动,主要是加入了boocmd那一行,这样下载进去就能直接启动了。
baudrate=115200
bootcmd=nboot 0x7fc0 0 0x200000; bootm 0x7fc0
bootdelay=1
ethact=emac
ethaddr=00:00:00:11:66:88
stderr=serial
stdin=serial
stdout=serial
烧写前,最好对芯片进行一次Erase。几个文件的烧写类型及地址大家注意下,别搞错了。
2)上电,看看效果,调试串口打印信息如下:
这一次很顺利啊,一次就成功了,这就说明我们上述做的根文件系统是可以正常使用的了。
6.2.验证helloworld能否在板子上运行
我们还要看看我们之前编译的helloworld程序能不能运行,我们把helloworld放到板子里去,怎么把这个文件放到板子上呢?有以下几种方式:
a) 把Helloworld在Ubuntu下放到rootfs文件夹里,然后按照上述的方法打包、下载进去。
b)通过scp或者NFS服务,直接通过网口放到板子里
c) 先放到U盘里,然后U盘插入到板子上,再复制过去
方法a)自然没问题,不过有些麻烦,方法b)现阶段我们的文件系统并不支持,暂时先不弄了,下一篇文章会介绍scp的移植,我们来试试方法c)吧
1)插入U盘到电脑上,把helloworld拷贝过去
2)把U盘插入到板子上,这时调试串口会自动输出如下信息,提示我们有USB Mass Storage设备接入了,看来内核已经把USB这部门驱动已经做进去了。这不是有点像我们给PC机重装Windows系统的过程,默认鼠标键盘也是可以直接使用的。
我们进入到/dev目录里,可以看到有sda1设备,LINUX所有的存储设备都是映射成"文件"来访问的,包括U盘、光驱、硬盘等。这个sda1就对应我们刚插入的U盘。
那么该如何访问U盘的东西呢?
我们需要挂载,使用mount指令,我们执行以下命令:
mkdir mnt
cd mnt
mkdir usb
cd usb
mount -t vfat /dev/sda1 /mnt/usb
cd /
mkdir opt
cp /mnt/usb/helloworld /opt
完成的事情是把sda1挂载到了/mnt/usb目录上,这样/mt/usb目录里就有了U盘里的内容,然后再复制到了系统的/opt目录。
我们在/opt目录里执行./helloworld,提示如下错误:
-/bin/sh: ./helloworld: not found
这是怎么回事呢?原因很简单,helloworld的执行是需要依赖一些库的,不可能系统里什么都没有就执行能执行成功了。所以需要我们把交叉编译链~/nuc972/toolchain/arm-2014.05/arm-none-linux-gnueabi/libc/lib里的库文件复制到板子的lib目录里。
可以先到arm-2014.05/arm-none-linux-gnueabi/libc/lib目录中,压缩下
tar -cvf lib.bin *
然后通过U盘放到板子的/lib目录中解压
tar -xvf lib.bin
这样操作之后,再次执行helloword,结果如下:
另外可以对板子断电-再上电,看看我们之前操作的内容都还在,因为它是存到NAND Flash里的,所以断电是不丢失的。
7.结束语
如果你亲自动手实现了这篇文章介绍的所有内容,相信你对根文件系统一定有了一个非常感官的认识。包括这篇在内,我用了5篇文章一直在介绍嵌入式Linux基础环境相关的内容,你应该也能感受到这和我们以前接触的单片机开发还是有着较大的差异。从下一篇文章开始,我们就正式进入到具体的应用了。我会陆续介绍GPIO、UART使用;网络通信;WIFI使用;摄像头采集数据;EC20 4G模块使用;QT编程;Opencv使用等。
相关问答
mi flash驱动 安装不了?关于这个问题,如果您在安装MiFlash驱动时遇到问题,可能是以下原因之一:1.您的电脑没有管理员权限。请确保您以管理员身份登录。2.您的电脑中已安装了其他驱...
nvflash怎么用-ZOL问答nvflash怎么用举报7人讨论7201次围观关注问题写回答讨论回答(7)furonglee1、首先鼠标右击想要兼容的exe文件,然后选择“属性”选项;2、在打开的属性面板...
怎样安装华硕主板BIOS 驱动 ?具体步骤如下:1.开启Winflash来更新BIOS;2.确认网络联机正常和电源供应器已连接后再点选'下一步',进入华硕官网下载BIOS文件,点选'Driv...
ecarflash编程器怎么用?使用Ecarflash编程器时,首先需要将编程器连接到电脑上,并安装相关的驱动程序和软件。然后,将编程器与车辆的OBD接口连接,并根据软件的指导选择相应的车型和...
amd显卡 驱动 怎么升级-ZOL问答不知道你用的显卡催化剂驱动是哪个版本,有人说用催化剂12.2确实在上古卷轴5中有马赛克问题,昨天AMD刚出了催化剂12.3你可以试试,找不到12.3的话就用驱动精灵更新...
U盘2.0 驱动 那里下载 - 彼得兔 的回答 - 懂得随主板提供U盘一般很少是2.0的,因为flash芯片的读写速度到不了2.0的要求480哪可以到驱动之家这个网站下载O
假显卡如何安装 驱动 ?这个过程难的点就在于你去哪里找8600gt的bios,毕竟这么老的一款显卡了,要找这个还是有点难度的。但是如果能找到的话将他刷回去还是很容易的。好了,说了这么...
华硕怎么更新主板 驱动 程序和bios?要更新华硕主板的驱动程序和BIOS,首先需要访问华硕官方网站,找到与您的主板型号相对应的支持页面。在该页面上,您可以下载最新的驱动程序和BIOS文件。在下载...
电脑连接投影仪显示安装 flash驱动 ?在连接电脑和投影仪后,如果在显示过程中出现需要安装flash驱动的提示,需要在电脑浏览器中下载并安装flash插件。在安装完成后,重新打开浏览器即可正常显示投影...
我的电脑win10系统安装MiFlash怎么没提示安装 驱动 ?先重启计算机,然后1:开始----设置-----设备----打印机和扫描仪----相关设置----设备和打印机,删除打印机。2:控制面板---程序,卸载原来安装的驱动,重启计...