东莞网站营销推广,休闲零食网站建设+中企动力,seo怎样优化网站,有没有做数学题挣钱的网站大家好#xff0c;我是情报小哥#xff01;本文为【从单片机步入嵌入式Linux】系列文章的第四篇文章#xff0c;前面三篇大家有时间也可以回头阅读一下#xff0c;本系列文章的很多知识我都会从裸机开发和理解的角度来分析#xff0c;帮助大家迅速理解Linux系统相关的知识… 大家好我是情报小哥本文为【从单片机步入嵌入式Linux】系列文章的第四篇文章前面三篇大家有时间也可以回头阅读一下本系列文章的很多知识我都会从裸机开发和理解的角度来分析帮助大家迅速理解Linux系统相关的知识点~01关于文件系统很多朋友一看到系统这两个词眼就有点蒙了嵌入式系统、Linux系统等等就感觉很庞大、水很深~其实完全不要有这样的顾虑既然能够成为一个通用的系统所采用的技术都是相对比较成熟的但是不要一开始就想着一头扎进去研究本质甚至重写改造而是更多的享受该系统所提供的服务以文件的形式组织数据展示给用户会更加的形象直观。就像使用笔记本电脑来制作一个精美的ppt并不需要我们先去研究计算机系统是怎么构成的、怎么运作的。只需要了解并熟悉ppt软件的使用便能够制作出一份不错的PPT。同样文件系统也是类似的文件系统主要是架在存储器上来管理数据这些数据也就是文件可以先了解这些文件如何操作而暂时不需要直接研究这些文件怎么管理等同样这也是linux系统一切皆文件的哲学思想的体现。02嵌入式Linux文件系统文件系统组织数据和管理文件的方式和算法不同不同文件系统所适应的存储介质也不同等等使得文件系统的类型变得比较丰富比如有些非常精简占用存储空间小甚至能够放到单片机中也能良好使用当然这样的文件系统提供的功能也相对比较简单而有些文件系统更加的安全等。为了增强嵌入式Linux系统的通用性其支持的文件系统当然也需要非常之多比如 ext2、ext3、ext4、jffs、yaffs、romfs 等等然而Linux内核中为了支持这么多的文件系统从而抽象出了一套统一的层叫虚拟文件系统(VFS)前面提到的文件系统类型均可以在VFS中得到支持嵌入式Linux文件系统架构简图如下:03文件系统制作那么为了构造自己的嵌入式系统就需要制作根文件系统在进行文件系统制作前首先我们要明白Linux系统为什么需要文件系统这个问题其实可以类比我们的window为什么需要C盘系统盘中里面的文件内容在Linux内核启动过程中第一个挂载的就是根文件系统如果没有根文件系统也就无法再挂载其他文件系统了根文件系统相应目录中存在Linux系统启动过程中一些关键性的文件和程序比如shell程序、各种命令行程序(如ls等)、Linux内核启动的第一个程序init等等。对于文件系统的格式我们倒可以通过相应的工具直接制作毕竟这是比较固定化的东西而对于文件系统中Linux启动和使用必须要的文件从哪里来呢这样就需要busybox了。busybox在嵌入式领域非常常用它集成了各种工具和命令说得简单一点就是一个制作根文件系统的安装程序。下面以生成.yaffs2为例画了一个简图:1、安装busybox 1首先我们需要下载busybox安装文件这些东西都有人在维护着:下载路径 : Index of /downloads (busybox.net)这次使用的版本为busybox1.22.1版本如下图所示:2解压配置busybox在压缩文件目录解压采用如下命令解压busybox:tar jxvf busybox-1.22.1.tar.bz2并且建立一个目录用于存放所要制作的最小根文件系统(Minifs),如下图所示:待会配置完busybox以后就可以直接把内容安装到Minifs文件夹中。回到busybox目录采用如下命令行进入busybox菜单进行makefile配置选项设置:make menuconfig CROSS_COMPILE/home/book/WorkSpace/Qt/src/arm-linux-gcc-4.4.3/opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux- ARCHarm -j8小哥不太想把编译器设置到系统中所以这里麻烦一点指定了相应gcc编译器路径如果已经有配置gcc系统路径可以直接make menuconfig这也是Linux中进行工程配置的常规操作。3具体配置信息:设置【Dont use /usr】,为了避免有可能破坏原宿主系统中的/usr 选择交叉编译工具链路径.../arm-linux-:把busybox安装路径设置为前面创建的Minifs文件夹路径:配置完成以后记得保存然后开始进行编译、安装。4busybox分别执行编译和安装分别执行命令make 和 make install如果大家跟我一样没有在系统中设置编译器路径记得后面加上编译器路径。顺利执行完上面的安装路径以后便可以在Minifs文件夹中看到如下安装项目这些就是我们制作根文件系统的材料 :可以看到所安装的文件夹中主要是一些系统使用的运行程序如init程序和命令行工具(如ls、mv)等:这样busybox就安装完了但是我们还需要对其中与系统运行有关的文件进行添加和配置 。2、构造glibc库 前面我们在编译busybox的时候其编译选项采用的是【No shared libs】没有使用静态链接库这样我们就需要自己构建glic库相关程序只有在加载运行的时候才能链接到相关库中的实现最终得以正常运行--也叫动态链接。动态链接至少要准备加载器和动态库因为编译器在编译程序的时候也有可能使用到这些库所以这些在交叉编译器中已经存在了只需要拷贝相应的文件到/lib中即可。cp /home/book/WorkSpace/Qt/src/arm-linux-gcc-4.4.3/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/lib/*.so* ./lib -dcp /home/book/WorkSpace/Qt/src/arm-linux-gcc-4.4.3/opt/FriendlyARM/toolschain/4.4.3/lib/*.so* ./lib -d注意使用cp命令的时候需要注意加上-d选项表示复制时保留链接。那么这样/lib目录就准备好了。3、添加相关配置和文件 通过busybox我们把根文件系统中大部分目录已经建立好了 不过还有一些启动的脚本等配置信息需要手动添加因为Linux在启动过程中会需要读取并运行这些配置而这些配置信息基本上都统一放在/etc目录下:如上是我们在/etc目录下主要配置的文件信息内核启动以后就会创建busybox中的init进程(可以在前面生成的/sbin文件夹中看到init可执行程序)init进程也是第一个进程而init进程会根据/etc/inittab文件来创建其他进程比如执行脚本、启动shell以及电源开关机等处理。(详细说明可以参考inittab格式)下面是配置的initab文件内容:第三行我们知道在inittab中一般首先会执行/etc/init.d/rcS这个开机脚本文件而这个文件可以用于配置开机启动程序和服务以及linux系统配置比如设置IP地址挂载其他文件系统等等。(如下是rcS脚本)而rcS脚本文件所要挂载的文件系统来源于fstab文件中fstab该文件中指定需要挂载哪些文件系统所以只要将磁盘信息配置到该文件中便会自动挂载。如下是主要挂载的文件系统由于我们需要操作外部设备而这些设备都是以文件的形式在/dev目录中展示(一切皆文件)一种方式是静态在该目录中mknod创建设备节点而另外一种便是通过mdev动态的创建。大家都知道udev是linux下的一个管理/dev下设备节点的管理器,驱动程序提供信息设备文件名、设备号udev便会根据驱动提供的信息自动创建设备文件才会注册生成相应的设备节点。那么mdev就是busybox中的udev的简化版本。所以为了支持mdev需要系统支持sysfs和tempfs这些在上面的fstab文件中进行了描述同时为了让mdev自动启动我们在rcS脚本文件中加入了相应的启动命令具体可以参考busybox中的mdev的用法文档:不过在mdev构造/dev目录之前还需要静态创建两个节点console和null以供init进程使用那就只能通过静态方式创建了如下LinuxPC下通过命令创建即可。mknod console c 5 1
mknod null c 1 3然而后面小哥把该文件制作成为yaffs文件系统映像挂载以后会报一些文件权限问题所以这里我们还需要把rcS和rc.local文件设置一下可执行权限,类似于如下命令:chmod -x rcS
chmod -x rc.local至此一个最小根文件系统材料就准备好了。04制作映像并烧录我们最终需要把前面构建的文件系统烧录到开发板中的非易失性存储器中是不是我们直接把刚刚构建的文件系统压缩打包烧写到相应的分区即可其实差不多是这个道理吧但不是简单使用tar命令直接进行压缩而是要通过工具把其转化为相应的文件系统映像格式这样操作系统才能够识别该映像文件(烧录进去的内容)并且读取到与构建前相同的文件结构和内容否则操作系统找不到文件系统中你所配置的内容。1、制作映像文件 这里把前面构建好的最小根文件系统制作成yaffs烧录映像文件这里就直接使用到百问网做好的yaffs映像文件制作工具的源码并编译生成制作工具-mkyaffsimage应用程序软件。如下是制作mkyaffsimage制作工具所使用的命令:1tar jxvf yaffs_source_util_larger_small_page_nand.tar.bz2
2
3cd ./Development_util_ok/yaffs2/utils
4
5make CROSS_COMPILE/home/book/WorkSpace/Qt/src/arm-linux-gcc-4.4.3/opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux- ARCHarm -j8
6
7chmod -x mkyaffs2image首先解压百问网提供的yaffs工具源码到utils目录中使用make直接编译便可以生成mkyaffsimage工具然后赋予该工具为可执行权限。接着下面直接使用该工具把前面构建的根文件系统Minifs制作为映像文件:1./mkyaffs2image /home/book/WorkSpace/Qt/src/busybox-1.22.1/Minifs Minifs.yaffs于是在当前目录中即可获得文件系统的烧录映像了:2、烧录根文件系统 同样使用uboot来进行整个系统的部署包括根文件系统其烧录过程与前面进行linux内核映像文件烧录一致。直接在uboot中使用TFT服务先下载到SDRAM中然后使用如下命令烧录nandflash中进行固化:1nand erase.part rootfs
2nand write.yaffs 0x30000000 0x02460000 $filesize
3boot首先把uboot中存放根文件系统rootfs的分区进行擦除然后把SDRAM中yaffs文件映像烧写到Nandflash中烧写完成以后采用boot命令重新启动系统。最后我们看到Linux重新启动并挂载了根文件系统并进入shell命令行:至此根文件系统也成功构建好了其他相关问题等我们使用过程中再具体解决~这样一个相对比较完整的Linux系统就运行起来了这样就跟命令行版本的LinuxPC类似了我们可以在上面执行应用程序等等。 最 后 好了这里小哥就介绍了一下Linux文件系统的构建、烧录相关知识希望本文能够对你有帮助下期应该是跟大家介绍QT的移植等~推荐阅读专辑|Linux文章汇总专辑|程序人生专辑|C语言我的知识小密圈关注公众号后台回复「1024」获取学习资料网盘链接。欢迎点赞关注转发在看您的每一次鼓励我都将铭记于心~嵌入式Linux微信扫描二维码关注我的公众号