嵌入式linux根文件系统制作经典doc.ppt
《嵌入式linux根文件系统制作经典doc.ppt》由会员分享,可在线阅读,更多相关《嵌入式linux根文件系统制作经典doc.ppt(322页珍藏版)》请在三一办公上搜索。
1、嵌入式linux根文件系统制作(经典),1 准备工作,下载busybox工具 说明:用于制作可执行命令工具集,2 开发环境,1)主机:RedHat 9,2)交叉编译工具路径:/usr/local/arm/3.3.2/(用于编译busybox1.2.0),把/usr/local/arm/3.3.2/bin路径添加到/etc/profile文件中,3)开发板:友善之臂SBC2410,4)开发板分别使用的Linux2.4.18内核和Linux2.6.14内核验证文件系统,3 建立目标板空根目录文件夹及根目录下的文件夹,root190 friendly-arm#mkdir myroots,root19
2、0 friendly-arm#pwd,/friendly-arm/myroots,root190 friendly-arm#cd myroots,root190 myroots#,root190 myroots#mkdir bin sbin usr lib dev mnt opt root etc home proc tmp var,root190 myroots#mkdir etc/init.d,进入etc/init.d目录下,建立一个脚本文件,并命名为rcS,用gedit打开,添加如下内容:,#!/bin/sh,PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr
3、/local/bin:,runlevel=S,prevlevel=N,umask 022,export PATH runlevel prevlevel,#,#Trap CTRL-C&c only in this shell so we can interrupt subprocesses.,#,trap:INT QUIT TSTP,root190 myroots#cd./lib,也就是进入lib目录,添加相应的库文件,具体操作略。,4 移植Busybox,进入到压缩文件存放的目录下,并解压。然后进入解压后的busybox目录文件夹,随后配置busybox。,root190 busybox-1.
4、2.0#make menuconfig,执行之后,将出现如下图所示的配置界面:,由于每个版本的配置选项组织有所不同。不管怎样,我们注意以下选项就行了:,1)Support for devfs,2)Build BusyBox as a static binary(no shared libs)/将busybox编译成静态链接,3)Do you want to build busybox with a Cross Compile?,(/usr/local/arm/3.3.2/bin/arm-linux-)Cross Compile prefix/指定交叉编译器,4)init,5)Support r
5、eading an inittab file/支持init读取/etc/inittab 配置文件,6)(X)ash选中ash/建立的rcS脚本才能执行,7)ash,8)cp cat ls mkdir mv/可执行命令工具的选择,自己看着办吧,需要用到的就选上,9)mount,10)umount,11)Support loopback mounts,12)Support for the old/etc/mtab file,13)insmod,14)Support version 2.2.x to 2.4.x Linux kernels,15)Support version 2.6.x Linux
6、 kernels,16)vi,以上内容必须选上,其他可按默认值;如果要支持其他功能,如网络支持等,可按需选择,英语不是很烂的话,这些都没有问题。,配置好之后,保存退出。然后对其编译和安装到刚才建立的根文件系统目录下:,root190 busybox-1.2.0 make TARGET_ARCH=arm CROSS=arm-linux-PREFIX=/friendly-arm/myroots/all install,安装好之后,将相应的二进制文件拷贝到根文件系统相应的目录下。,5 制作yaffs文件系统包,root190 friendly-arm#mkyaffsimage myroots myr
7、oots.img,6下载根文件系统包到开发板上,并运行,其结果如图所示,7补充,首先,本文档制作的根文件系统,是用mkyaffsimage打包成了yaffs镜像文件,也可以使用其他打包工具制作成其他形式的根文件系统,但必须是内核要有相应文件系统的支持,否则,将无法挂上根文件系统。,其次,我们可以根据项目需要,在相应的目录下,添加相应的文件,并配置相应的服务。如内核动态加载模块可放在lib下,在启动脚本里挂载相应的模块;在etc目录下,可移植tinyligin 登录界面应用程序,等等,用Busybox创建文件系统,编译busybox的组合:busybox-1.0.0 arm-linux-gcc-
8、2.95.3(sbc2410等开发板)busybox-1.1.3 arm-linux-gcc-3.3.2 buxybox-1.7.3 arm-linux-gcc-3.4.1,经典参考:http:/下载busyboxhttp:/husaberg.toby-文件系统制作,移植基本过程:,1.到http:/解压busybox1.7.3 tar jxvf busybox-1.7.3.tar.bz23.make defconfig4.make menuconfig 在build options中选择Build busybox as a static binary,主要是C库的连接方式,安装目录等。5.m
9、ake,6.创建rootfs目录7.make install,配置可参考:(小寿制作)busybox-1.1.3制作根文件系统!http:/和1.5.1(根文件系统制作)http:/,文件系统的制作 luofuchong,http:/,可能会出现的错误:1.出现如下错误 CC miscutils/taskset.omiscutils/taskset.c:17:error:parse error before*tokenmiscutils/taskset.c:18:warning:function declaration isnt a prototypemiscutils/taskset.c:I
10、n function _from_cpuset:miscutils/taskset.c:22:error:CPU_SETSIZE undeclared(first use in this function)miscutils/taskset.c:22:error:(Each undeclared identifier is reported only oncemiscutils/taskset.c:22:error:for each function it appears in.)miscutils/taskset.c:26:warning:implicit declaration of fu
11、nction CPU_ISSETmiscutils/taskset.c:26:error:mask undeclared(first use in this function)miscutils/taskset.c:In function taskset_main:miscutils/taskset.c:47:error:cpu_set_t undeclared(first use in this function)miscutils/taskset.c:47:error:parse error before maskmiscutils/taskset.c:68:warning:implici
12、t declaration of function CPU_ZEROmiscutils/taskset.c:68:error:new_mask undeclared(first use in this function)miscutils/taskset.c:69:error:CPU_SETSIZE undeclared(first use in this function)miscutils/taskset.c:71:warning:implicit declaration of function CPU_SETmiscutils/taskset.c:78:error:mask undecl
13、ared(first use in this function)make1:*miscutils/taskset.o Error 1make:*miscutils Error 2,make menuconfig找到Miscellaneous Utilities,去掉task set,2.time.clibbb/time.c:20:error:CLOCK_MONOTONIC undeclared(first use in this function),make menuconfig 去掉Busybox Settings-Busybox Library Tuning-Use clock_getti
14、e(CLOCK_MONOTONIC)syscall,相关问题可参考:交叉编译busyboxhttp:/的编译过程http:/,建立rootfs目录,可以使用如下脚本文件:,#!/bin/bash,mkdir rootfs,cd rootfsmkdir bin dev etc lib proc sbin sys usr mnt tmp varchmod 1777 tmpmkdir usr/bin usr/lib usr/sbin lib/modulesmkdir var/lock var/lib var/log var/run var/tmpchmod 1777 var/tmpcd dev/mk
15、nod-m 666 console c 5 1 mknod-m 666 null c 1 3cd./注意:执行脚本时,要切换到root用户。,在内核目录执行:,$cd home/arm/linux-2.6.14.1/,$make modules$make modules_install INSTALL_MOD_PATH=/nfs/rootfs/,有关linuxrc、rcS 等文件的编写,可参考:用BusyBox制作根文件系统http:/2.6.22.1内核在s3c2410平台的移植(完美版)四:文件系统的制作 部分http:/,例如linuxrc内容如下:$vim rootfs/linuxrc
16、#!/bin/shecho Hello linux,ggggggexec/sbin/init然后修改权限:chmod 775 linuxrc,用密码登录可参考:用busybox制作嵌入式Linux的文件系统http:/login:启动busybox文件系统后怎么主动提示 用户登陆认证?在配置BusyBox时都加了getty,passwd,login等命令,也加入了文件groupshadowpasswd 但还是没有弹出界面,自己输入login后倒是提示你输入用户名和密码 内核启动后加载文件系统,busybox为1.1.3 挂载成功后就直接到 BusyBox v1.1.3(2007.12.13-0
17、6:5 Please press Enter to activate this console.怎么使启动文件系统立即需要用户验证?,编译工具的选择有两种方式:,ARM开发板:要使用交叉编译,所以我们要指定交叉编译工具的位置,可通过现面的方法实现:方法一:修改宿主机的PATH变量,使其包含交叉编译工具的目录;然后在调用make命令时,指定TARGET_ARCH和CROSS变量:make TARGET_ARCH=arm CROSS=arm-linux-。方法二:新版的busybox可以在配置中设定交叉编译工具的,直接运行make就跟为本机编译busybox没有任何区别了。http:/,动态编译方
18、式,准备链接库:,ARM微处理器与应用开发 赖于树 P248复制链接库的步骤:$cp/usr/local/arm/3.4.1/arm-linux/lib/$cp*-*.so$PRJROOT/rootfs/lib$cp-d*.so.*0-9$PRJROOT/rootfs/lib/$cp libSegFault.so libmemusage.so$PRJROOT/rootfs/lib/这些库文件中包含大量的调试信息,交叉编译工具链提供了一个除去这些调试信息的工具:strip$arm-linux-strip$PRJROOT/rootfs/lib/*.so,参考:基于s3c2440 yaffs2 文件
19、系统的移植http:/建立动态运行库#cp-rfd/usr/local/arm/4.0.3/arm-linux/lib/*rootfs/lib/拷贝经过交叉编译的库文件,参数-d,保持库文件的链接关系。#rm-rf rootfs/lib/*.a 删除所有的静态库文件。注:/usr/local/arm/4.0.3/为交叉编译工具链的存放目录。#arm-linux-strip rootfs/lib/*移除所有的符号信息,压缩库空间。,如果不知道需要哪些共享库,可以在你写好自己的程序后使用#ld hello 命令来看看需要哪些共享库然后在复制到/lib目录下面!,参考:http:/,http:/用b
20、usybox创建基于Linux2.6.24内核的nfs根文件系统,4查看共享了哪些库文件 用命令 arm-linux-readelf-a$program|grep shared library-rootlocalhost bin#pwd/root/maoyong/busybox-1.4.2/_install/bin,rootlocalhost bin#arm-linux-readelf-a busybox|grep shared library0 x00000001(needed)shared library:libcrypt.so.10 x00000001(needed)shared lib
21、rary:libm.so.60 x00000001(needed)shared library:libc.so.6-如上所示 要把/usr/local/arm/3.3.2/arm-linux/lib目录下的libcrypt.so.1 libm.so.6libc.so.6文件是busybox所需的共享库文件,要把它以及和他相关的链接文件拷贝到你新建的文件系统的 lib 目录。(注意:libcrypt.so.1 libm.so.6 libc.so.6相关的链接文件也要拷贝到lib目录),使用busybox-1.9.2制作根文件系统,制作嵌入式根文件系统常见问题详解,制作嵌入式根文件系统常见问题详解
22、,在介绍制作嵌入式根文件系统常见问题详解之前首先介绍点关于嵌入式根文件系统的背景知识,关于inittab的:init进程是系统中所有进程的父进程,init进程繁衍出完成通常操作所需的子进程,这些操作包括:设置机器名、检查和安装磁盘及文件系统、启动系统日志、配置网络接口并启动网络和邮件服务,启动打印服务等。Solaris中init进程的主要任务是按照inittab文件所提供的信息创建进程,由于进行系统初始化的那些进程都由init创建,所以init进程也称为系统初始化进程。,下面具体说明嵌入式根文件系统inittab文件的格式。,inittab文件中每一记录都从新的一行开始,每个记录项最多可有51
23、2个字符,每一项的格式通常如下:id:rstate:action:process,下面分别解释。,1.id字段是最多4个字符的字符串,用来唯一标志表项。,2.rstate(run state)字段定义该记录项被调用时的运行级别,rstate可以由一个或多个运行级别构成,也可以是空,空则代表运行级别06。当请求init改变运行级别时,那些rstate字段中不包括新运行级别的进程将收到SIGTERM警告信号,并且最后被杀死;只有a、b、c启动的命令外(a、b、c不是真正的运行级别),3.action字段告诉init执行的动作,即如何处理process字段指定的进程,action字段允许的值及对应的
24、动作分别为:,1)respawn:如果process字段指定的进程不存在,则启动该进程,init不等待处理结束,而是继续扫描inittab文件中的后续进程,当这样的进程终止时,init会重新启动它,如果这样的进程已存在,则什么也不做。,2)wait:启动process字段指定的进程,并等到处理结束才去处理inittab中的下一记录项。,3)once:启动process字段指定的进程,不等待处理结束就去处理下一记录项。当这样的进程终止时,也不再重新启动它,在进入新的运行级别时,如果这样的进程仍在运行,init也不重新启动它。,4)boot:只有在系统启动时,init才处理这样的记录项,启动相应进
25、程,并不等待处理结束就去处理下一个记录项。当这样的进程终止时,系统也不重启它。,5)bootwait:系统启动后,当第一次从单用户模式进入多用户模式时处理这样的记录项,init启动这样的进程,并且等待它的处理结束,然后再进行下一个记录项的处理,当这样的进程终止时,系统也不重启它。,6)powe*il:当init接到断电的信号(SIGPWR)时,处理指定的进程。,7)powerwait:当init接到断电的信号(SIGPWR)时,处理指定的进程,并且等到处理结束才去检查其他的记录项。,8)off:如果指定的进程正在运行,init就给它发SIGTERM警告信号,在向它发出信号SIGKILL强制其结
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 linux 文件系统 制作 经典 doc
链接地址:https://www.31ppt.com/p-5398553.html