mini6410基于linux2.6.36内核通过NFS启动根文件系统总结(四制作根文件系统及通过NFS挂载文件系统)_yinjiabin的博客-程序员秘密

技术标签: 虚拟机  build  linux内核移植  linux  linux内核  compiler  嵌入式  

本系列文章有本人yinjiabin制作,转载请注明出处:

http://blog.csdn.net/yinjiabin/article/details/7489563

根文件系统一般包括:

1)基本的文件系统结构,包含一些必须的目录,比如:/dev,/proc,/bin,/etc,/lib,/usr,/tmp;

2)基本程序运行所需的库函数,如:libc/uC-libc;

3)基本的系统配置文件,如:rc,inittab等脚本文件;

4)必要的设备支持文件,如:/dev/hd*,/dev/tty,/dev/fdO;

5)基本的应用程序,如:sh,ls,cp,mv等。 

根文件系统的制作就是生成包含上述各种文件的文件系统的过程,可通过直接拷贝宿主机上交叉编译器处的文件来制作根文件系统,但是这种方法制作的根文件系统一般过于庞大。也可通过一些工具如busybox来制作根文件系统,用busybox制作的根文件系统可以做到短小精悍并且运行效率较高。写成shell文件便于操作,有些人将BusyBox称为Linux工具里的瑞士军刀.


根文件系统是linux启动时使用的第一个文件系统。没有根文件系统,linux将无法正常启动。根文件系统:有一系列的目录组成,目录中包含了应用程序、c库、以及相关的配置文件。

step:创建根文件系统目录

cd /opt/FriendlyARM/mini6410/linux

mkdir rootfs

cd rootfs

mkdir bin dev etc lib proc sbin sys usr mnt tmp var
mkdir usr/bin usr/lib usr/sbin lib/modules


step2:创建设备文件:

cd dev/
mknod -m 666 console c 5 1
mknod -m 666 null c 1 3
cd ..


step3:安装/etc(配置文件可以从其他做好的嵌入式系统中cp)

tarzxvf etc.tar.gz –C /xxx/rootfs

step4:编译内核模块:

进入Linux内核目录(linux 2.6.36)
make modules ARCH=arm CROSS_COMPILE=arm-linux-

step5:安装内核模块

make modules_install ARCH=arm INSTALL_MOD_PATH=/xxx/rootfs

step6: 配置busybox

Busybox: 嵌入式开发中的瑞士军刀

进入busybox目录执行
make menuconfig

a.进入 Busybox Settings à
build Options->
   选中
“Build busybox as a static binary”, 静态链接
   Cross Compiler prefix (arm-linux-)
   Installation Options->
   选中
“Don‘t use /usr”, 选中该项可以避免busybox 被安装到宿主系统的/usr目录下,破坏宿主系统
   Busybox Installation Prefix (
/xxx/rootfs)
   该选项表明编译后的busybox的安装位置

step7: 编译,安转busybox

make ARCH=arm CROSS_COMPILE=arm-linux-
make install


step8: 从 NandFlash 启动 Tiny6410,然后修改UBoot 的环境变量 bootargs(就是这里了,可以解决一开始文章的 not responding的问题)!

操作命令:

setenv serverip console=ttySAC0 root=/dev/nfs nfsroot=192.168.1.100:/opt/FriendlyARM/mini6410/linux/rootfs,proto=tcp,nfsvers=3,nolock ip=192.168.1.70:192.168.1.100:192.168.1.100:255.255.255.0:linux.arm9.net:eth0:off

解释一下其中的意思了:

console=ttySAC0                     ttySAC0 作为控制台

root=dev/nfs                              固定格式,表示内核采用nfs 方式起根文件系统

nfsroot=192.168.1.100:/opt/FriendlyARM/mini6410/linux/rootfs,

                                                    表示的是 nfs 起的根文件系统位于 nfs 服务器 /opt/FriendlyARM/mini6410/linux/rootfs,目录下

proto=tcp,nfsvers=3,nolock   如果不加这条语句会造成上面的nfs: server192.168.1.100notresponding, still trying这样的错误!

原因:NFS的默认传输协议是UDP,而PC机与嵌入式系统通过UPD交互时就会出现严重的网卡丢包现象(这个也只是暂时的分析)!貌似好多人都说是网卡移植出现的问题!具体我也就不知道了,反正写上这个,然后就没有问题了

 ip=192.168.1.70:192.168.1.100:192.168.1.100:255.255.255.0:linux.arm9.net:eth0:off

                              这句话的格式是:ip=IP1:IP0:IP2:IP3:nameofyoulike:eth0:off

                                          第一项(IP1)是目标板的临时IP(注意不要和局域网内其它的IP有冲突)

                              第二项(IP0)是我的虚拟机的IP

                              第三项(IP2)是目标板上网管(GW)的设置,这个参数设置跟虚拟机网管一致

                              第四项(IP3)是子网掩码

                              第五项(yourname)是开发板的名字(随便啦)

                                      第六项(eth0)是网卡设备的名字

操作过程如下图所示:

1) 设置主机的IP地址和bootargs环境变量

 

执行结果


step9:通过 tftp 下载位于虚拟机 /tftpboot 目录下的uImage 文件到 0xc0008000 处!

执行结果


step: bootm

4. 等待查看,按提示按下Enter!







 
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yinjiabin/article/details/7489563

智能推荐

postman设置token为环境变量_单飞的主场的博客-程序员秘密

一、目录目的说明编写登录接口将token设置到环境变量验证token是否在环境变量中二、背景说明在使用postman做接口测试时,所有的接口都要依赖登录访问的token,那么这个token是如何获取的呢?在刚接触postman做接口测试的时候,本人是通过在浏览器请求登录的时候,按F12,点击network找到登录对应的链接URL,查看该URL的相应请求,从而将这里的token复...

maven 排除某个类,如何在Maven构建中永久排除一个测试类_weixin_39674190的博客-程序员秘密

I'm trying to exclude a single test from my maven build (I don't want the test to be compiled or executed). The following doesn't work:org.apache.maven.pluginsmaven-compiler-plugin**/MyTest.javaWhat i...

暑期项目实训SaaS云服务系统开发—云会议系统—— 7.26 对于开发中存在的bug进行调试_Joheey的博客-程序员秘密

7月26日开发日志​ 本周作为资源管理与业务分发组的部分的开发已经基本结束,本周主要任务是对于一些在迭代开发的过程中出现的BUG进行调试,对于一些早期设定的组件的逻辑进行完善。​ Department类作为后期迭代时加入的一个实体类,在开发最初已经预留了接口,但是在后期迭代的过程中,仍然忽略了一些问题——如用户注销时部门字段的删除等以及部门字段不为空的校验。​ 在演示的过程中遇到了以下问题:加入部门的用户在注销之后仍然能够通过部门获取到,并且普通用户注销后公司会被错误的注销,修改后如下:public

HttpServletRequest 获取 http 请求xml格式数据_httpservletrequest 获取xml_雪翼冰尘的博客-程序员秘密

HttpServletRequest req;BufferedReader in = new BufferedReader(new InputStreamReader(req.getInputStream())); StringBuilder stb = new StringBuilder(); String xmlHead = ""; String xmlContent = "";

小米手机搭载鸿蒙,弃安卓支持华为,小米新机要率先搭载鸿蒙,这话到底是谁说的..._yuxin tong的博客-程序员秘密

原标题:弃安卓支持华为,小米新机要率先搭载鸿蒙,这话到底是谁说的如今是一个自媒体的时代,任何人都可以在网上进行发声。但是一些自媒体为了博取眼球,而秀下限的操作也是频出。最近就有媒体利用小米和华为之间的矛盾,以及华为的现状大肆炒作了一番,这又是什么情况呢? 我们都知道华为现在所面临的窘境。等到华为手中的处理器用完之后,华为随时就要面临退出手机市场的局面。所以华为今年的HDC大会上,也是加大了自家生态...

c语言中的转义字符_c语言转义_JessieXW的博客-程序员秘密

c语言中的转义字符c语言中部分转义字符的引用1.在c语言中有双、单引号和反斜杠等字符,在引用的时候不是简单用单引号括起来就可以了,这样会造成错误。2.关于转义字符的引用有两种方法:-[]如果要使用单引号,形式应为 ’ ’ ‘(单引号)、’ " ‘(双引号)、’ \ '(反斜杠)。-[]还可以用字符对应的ASCII码值,此时使用不需要单引号。...

随便推点

在Windows Mobile上运行J2SE/J2ME!!!!!_咪当我系欧巴的博客-程序员秘密

本来来自http://blog.csdn.net/hellogv/ 有没有想过,在PC运行的J2SE程序可以在WINCE/PPC2003以上的系统运行? 现在外国的开源社区已经实现了做出来了这个WINCE上的JVM---------Mysaifu JVM。 不多说了,直接看看就知道: http://www2s.biglobe.ne.jp/~dat/java/project/jvm

蚂蚁金服面试及笔试(附自己的答案)_蚂蚁笔试_徐徐长安的博客-程序员秘密

1.自我介绍2.多线程,关键字threadlocal3.安全关键字synchronized的原理4.volitile的作用5.内存构造,辣鸡回收原理。常量所在位置,不同版本jdk有什么区别,full gc的垃圾回收算法,及原理,标记-清理算法如何标记的,如何判断是否被引用。6.正则如何使用7.spring boot 和spring框架的异同点,spring boot用的时候踩到的坑8...

使用程序代码安装/卸载.net服务(不使用InstallUtil.exe)_Hauk的博客-程序员秘密

在上一篇文章(C#系统服务定时执行)中讲到使用InstallUtil.exe来安装和卸载系统服务。那么,我们是否可以使用自己写的代码来做这些工作呢?答案是肯定的。下面我们来看看如何实现:1、首先我们照上一片文章配置好系统服务,并且生成一个exe文件。2、这里我们用一个winform来做,上面画2个按钮(一个安装服务,一个卸载服务)。3、安装服务按钮点击事件 /

C++前缀和_前缀和c++_赴星辰大海的博客-程序员秘密

输入一个长度为n的整数序列。接下来再输入m个询问,每个询问输入一对l, r。对于每个询问,输出原序列中从第l个数到第r个数的和。输入格式第一行包含两个整数n和m。第二行包含n个整数,表示整数数列。接下来m行,每行包含两个整数l和r,表示一个询问的区间范围。输出格式共m行,每行输出一个询问的结果。数据范围1≤l≤r≤n,1≤n,m≤100000,−1000≤数列中元素的值≤1000输入样例:5 32 1 3 6 41 21 32 4输出样例:3610AC代码:#in

OpenCV视频处理操作_kuokay的博客-程序员秘密

视频处理从文件中读取视频并播放在OpenCV中我们要获取一个视频,需要创建一个VideoCapture对象,指定你要读取的视频文件:创建读取视频的对象 cap = cv.VideoCapture(filepath)参数:filepath: 视频文件路径视频的属性信息2.1 获取视频的某些属性: retval = cap.get(propId)参数:propId: 从0到18的数字,每个数字表示视频的属性常用属性有:2.2 修改视频的属性信息cap.set(

推荐文章

热门文章

相关标签