技术标签: 虚拟机 build linux内核移植 linux linux内核 compiler 嵌入式
本系列文章有本人yinjiabin制作,转载请注明出处:
根文件系统一般包括:
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
root=dev/nfs
nfsroot=192.168.1.100:/opt/FriendlyARM/mini6410/linux/rootfs,
proto=tcp,nfsvers=3,nolock
原因: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
操作过程如下图所示:
1) 设置主机的IP地址和bootargs环境变量
执行结果
step9:通过 tftp 下载位于虚拟机 /tftpboot 目录下的uImage 文件到 0xc0008000 处!
执行结果
step: bootm
4. 等待查看,按提示按下Enter!
一、目录目的说明编写登录接口将token设置到环境变量验证token是否在环境变量中二、背景说明在使用postman做接口测试时,所有的接口都要依赖登录访问的token,那么这个token是如何获取的呢?在刚接触postman做接口测试的时候,本人是通过在浏览器请求登录的时候,按F12,点击network找到登录对应的链接URL,查看该URL的相应请求,从而将这里的token复...
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...
7月26日开发日志 本周作为资源管理与业务分发组的部分的开发已经基本结束,本周主要任务是对于一些在迭代开发的过程中出现的BUG进行调试,对于一些早期设定的组件的逻辑进行完善。 Department类作为后期迭代时加入的一个实体类,在开发最初已经预留了接口,但是在后期迭代的过程中,仍然忽略了一些问题——如用户注销时部门字段的删除等以及部门字段不为空的校验。 在演示的过程中遇到了以下问题:加入部门的用户在注销之后仍然能够通过部门获取到,并且普通用户注销后公司会被错误的注销,修改后如下:public
HttpServletRequest req;BufferedReader in = new BufferedReader(new InputStreamReader(req.getInputStream())); StringBuilder stb = new StringBuilder(); String xmlHead = ""; String xmlContent = "";
原标题:弃安卓支持华为,小米新机要率先搭载鸿蒙,这话到底是谁说的如今是一个自媒体的时代,任何人都可以在网上进行发声。但是一些自媒体为了博取眼球,而秀下限的操作也是频出。最近就有媒体利用小米和华为之间的矛盾,以及华为的现状大肆炒作了一番,这又是什么情况呢? 我们都知道华为现在所面临的窘境。等到华为手中的处理器用完之后,华为随时就要面临退出手机市场的局面。所以华为今年的HDC大会上,也是加大了自家生态...
c语言中的转义字符c语言中部分转义字符的引用1.在c语言中有双、单引号和反斜杠等字符,在引用的时候不是简单用单引号括起来就可以了,这样会造成错误。2.关于转义字符的引用有两种方法:-[]如果要使用单引号,形式应为 ’ ’ ‘(单引号)、’ " ‘(双引号)、’ \ '(反斜杠)。-[]还可以用字符对应的ASCII码值,此时使用不需要单引号。...
本来来自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...
CentOS8DNS配置
在上一篇文章(C#系统服务定时执行)中讲到使用InstallUtil.exe来安装和卸载系统服务。那么,我们是否可以使用自己写的代码来做这些工作呢?答案是肯定的。下面我们来看看如何实现:1、首先我们照上一片文章配置好系统服务,并且生成一个exe文件。2、这里我们用一个winform来做,上面画2个按钮(一个安装服务,一个卸载服务)。3、安装服务按钮点击事件 /
输入一个长度为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中我们要获取一个视频,需要创建一个VideoCapture对象,指定你要读取的视频文件:创建读取视频的对象 cap = cv.VideoCapture(filepath)参数:filepath: 视频文件路径视频的属性信息2.1 获取视频的某些属性: retval = cap.get(propId)参数:propId: 从0到18的数字,每个数字表示视频的属性常用属性有:2.2 修改视频的属性信息cap.set(