
接着上一次的内容,要从网络加载内核和设备树,以及挂载网络根文件系统,需要在UBoot里面设置 bootcmd 和 bootargs 两个环境变量如下:
set bootcmd 'tftp 41000000 uImagetftp 42000000 exynos4412-fs4412.dtbbootm 41000000 - 42000000'
set bootargs 'console=ttySAC2,115200 root=/dev/nfs rw nfsroot=192.168.1.8:/samba/nfs/rootfs,proto=tcp clk_ignore_unused /init=/linuxrc ip=192.168.1.100:192.168.1.8:192.168.1.1:255.255.255.0'
这两个参数需要根据自己的实际情况加以调整,主要是nfs和ip的一些设置。
bootcmd 是内核启动命令,其表示使用tftp协议,从TFTP文件夹下加载uImage到41000000的内存地址。然后从TFTP文件夹下加载exynos4412-fs4412.dtb到42000000的内存地址,然后执行bootm命令,从41000000的地址启动内核。
bootargs 是内核启动的参数,比如设置控制台的串口参数,指定根文件系统(这里我们使用nfs从网络上挂载根文件系统,注意协议用tcp,如果用udp的话,很可能会因为丢包而导致挂载失败)
最后需要saveenv保存设置。
就绪之后,板子重新上电,不要回车打断UBoot,让其引导Linux内核启动,结果内核启动失败。
后来在群里问了老师,他们发了内核镜像和设备树过来,让我用他们编译的试试,我一试,还真能用。本来我还怀疑是不是根文件系统的问题,后来老师让我看看设备树,说是要注释掉下面这一段。
但是我一看,本来就是注释掉的啊。。。然后就无解了,我以为可能还是根文件系统的问题,群里问老师也没有再回,就搁置了两天,这也算是中间的一个小插曲吧。然后我刚刚又在群里问,另一个老师说这一段现在不需要注释了,就是要加进来。然后我就把注释去掉了,重新编译后,果然就可以启动了。
可以看到根文件系统已经挂载成功了,那这样我们的环境搭建部分就测试OK了,我们得到了一份可以在4412板子上运行的Linux内核源码,UBoot源码和根文件系统。
所以呢,感觉培训机构的资料管理挺乱的,各个老师之间的信息不同步,资料也不同步,视频可能是很老的,配套资料也过时了,你不问还不知道,这可能也是他们需要建立大量的群来答疑的原因吧,总之,体验不佳。当然他们觉得这些步骤你不需要做啊,直接用现成的虚拟机镜像就可以了嘛,编译工具链,各种依赖库,环境变量那些都给你搞好了,干嘛要自己搞。他们这种想法就只适合那些初学驱动的人,确实,如果你只想学习驱动,那确实用他们准备好的虚拟机镜像就可以了。但是如果我要换一个芯片,环境还得自己搭,那就不好使了,或者说我自己已经有虚拟机了,再搞一个镜像其实显得很累赘。
好了,今天就到这里了,后面就开始UBoot的移植学习。
嵌入式Linux系统的移植主要有U-Boot、Linux内核、文件系统这三部分。Uboot是在系统上电时开始执行,初始化硬件设备,准备好软件环境,然后才调用Linux *** 作系统内核。文件系统是Linux *** 作系统中用来管理用户文件的内核软件层。文件系统包括根文件系统和建立于Flash内存设备之上文件系统。根文件系统包括系统使用的软件和库,以及所有用来为用户提供支持架构和用户使用的应用软件,并作为存储数据读写结果的区域。可将Linux系统移植过程大致需要分成6个步骤: 1) 准备工作,包括下载源码、建立交叉编译环境等。交叉开发是指在开发主机上安装开发工具,编辑、编译目标板的引导程序、内核和文件系统,使其能在目标板上运行。 2) 配置和编bootloader(引导装载程序)。通过这段小程序,可以初始化硬件设备、建立内存空间的映射表,从而建立适当的系统硬件环境,为最终调用 *** 作系统内核做好准备。 3) 配置和编译Linux内核,对其进行相应的裁剪,修改内核以支持相关的硬件设备。 4) 为大容量NAND Flash移植YAFFS文件系统,并将该文件系统加入Linux内核中; 5) 制作RAMdisk来挂载根文件系统。Linux系统中的文件和设备是通过文件系统来组织的。文件系统的存在使得数据和设备可以被有效而透明地存取访问。一个linux的最简根文件系统应该包括支持linux系统正常运行的基本内容,包括系统使用的软件和库,以及所有用来为用户提供基本支持的架构和指令。 6) 烧写、调试系统;如果调试出错,则需要重新配置,返回上述步骤(2)。嵌入式linux系统移植包含哪三部分内容所以要实现netfilter(iptables)就要从两方面来着手:1)内核支持netfilter;2)用户层的iptables配置命令。1、编译内核,支持netfilter
在宿主机上进入Linux内核目录,配置所需的内核模块:cd/usr/SRC/linuxmakemenuconfig
选中如下内核选项:
Generalsetup---
[*]Sysctlsupport(在ROMFS文件系统中/proc/syS/Net/ipv4/出现ip_forward)
Networkingoptions---[*]NetworkPACketfiltering(replaceSIPchains)IP:NetfilterConfiguration---(全部选择即可)
这样在内核中就选择支持了netfilter。接下来只需编译并生成内核映像文件并烧写到嵌入式系统即可。如果烧写后重起成功进入Linux,则说明新的支持netfiter的内核已经正常运行。(注意,这里的内核选项只是一些支持netfilter/iptables的选项。这里假设原有内核已支持嵌入式系统的相关硬件,并能在嵌入式平台上运行)。
2、编译生成iptables命令
iptables工具包可以免费从网上获得。下载iptables工具包后,进入下载目录,进行编译生成可执行文件,编译方法具体可以参考iptables目录下的INSTALL文件:
cd/root/iptables
makeKERNEL_DIR=/usr/src/linux(指定内核目录)
makeNO。SHARED_LIBS=1(静态链接编译生成可执行文件)
把生成的iptables可执行文件copy到ramdisk再下载到嵌入式系统中就可以运行。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)