Amazon Iot物联网终端之十五 定制Linux的rootfs
时间:10-02
整理:3721RD
点击:
1、定制linux的rootfs总体来说,不是不可逾越的门槛,但是需要花很多时间去配置一个干净,兼容的平台。我们所看到的随板开发工具如ubuntu是10版本的,这个也是为了保证兼容性和用户手册的准确而必要的措施。
从比较熟悉的ubuntu core开始,逐步实现linux的roorfs创建。具体参照
https://wiki.ubuntu.com/ARM/RootfsFromScratch
这个提供了rootfs from scratch的实现方法。
rootfs实现基本是2步,第一步创建宿主机host并下载需要的包package和dependency,以及配置环境,第二部是用chroot等配置并build包。
本次测试在最后的配置第二步中没有成功,主要原因因为在第一步中测试了3种包的下载方式,使得配置的环境不够干净,所以build失败,本帖先总结第一部分的工作。
2、第一步中,有3种方式
2.1 直接下载包,并用tar命令解压
mkdir ~/ubuntu-rootfs
cd ubuntu-rootfs
wget http://cdimage.ubuntu.com/ubuntu ... 4-core-armhf.tar.gz
sudo tar -xpfubuntu-core-14.04-core-armhf.tar.gz
这种方式中,上面提到的链接http://cdimage.ubuntu.com/ubuntu-core/releases/14.04.1/release/ubuntu-core-14.04-core-armhf.tar.gz,其实已经失效,现在的有效版本是15.4版本,新版的16.xx还没有更新ubuntu core,只有针对beagle bone有一个最新版的影像,不过是适合am335的开发板可以尝试移植。保留这个链接是说明最开始的版本有效性问题。也是我后来失败的原因之一,版本就木有搞统一。
2.2 使用QemuDebootstrap,QemuDebootstrap也是调用了后面提到的debootstrap。
sudo apt-get install qemu-user-static
sudo qemu-debootstrap --arch armhf --variant=minbase --verbose trusty /mnt/rootfs/
需要注意的是这里用的trusty是linaro提供的一个ubuntu内核,而不是ubuntu官网提供的内核。
执行完以后,就在/mnt/rootfs/下载了完整的rootfs的文件结构,不需要再用tar解压了,而第一种方法还需要自己创建工作目录并解压。
2.3 直接使用debootstrap
首先需要安装一下包,debootstrap;qemu-arm-static (syscall emulation) 或者 qemu-system-arm (machine emulation)模拟器;e2fsprogs等;一个内核a kernel for qemu/versatile/cortex-a8
然后
mk-sbuild --arch armel lucid这里使用的lucid是ubuntu core的一个版本号,也失效了,实际是用了vivid,这样下载一个keyring,以便后面的build。
因为ubuntu是基于debian的,查看对应目录,可以看到debian的keying和ubuntu的keyring都下载了。
3、以上各个方法都经过测试,可以实现,不过可以明显看到,下载和build的方式是有一定的不同的,这样就影响了后面的build,因为host的是最新的ubuntu16版本,因此,就的package是得不到支持的,如msbuild就需要下载ubuntu-dev-tools,因为其不再是独立的文件而是dev-tool的一个组成部分了。
诸如此类的情况,都需要分析和对应解决。
另外,在这个过程中,不推荐用root来执行,最好创建一个具有superuser级别,在sbuild组中的用户来执行,以保证避免失误带来的破坏。
因为本次评测是用虚拟机来执行ubuntu,所以不是很担心系统崩溃,因为重装也是极其简单。唯一的问题就是需要如果需要执行linux from scratch的功能,往往需要很大的内存空间,在最初设置时还是只用了20G,还是不够的。
以上很多命令的执行时间都有数个小时,因为周期过长,所以分步发帖,等第二步完成,再编辑本帖。4、有关截图
4.1 安装debootstrap;qemu-arm-static ,e2fsprogs等,以及说明。
执行sudo qemu-debootstrap --arch armhf --variant=minbase --verbose trusty /mnt/rootfs/后显示的rootfs文件目录结构,
执行替代msbuild的ubuntu-dev-tools所下载的包和执行的内容。以及生产的keyring
5. 在安装的过程中,https://wiki.ubuntu.com/ARM/RootfsFromScratch/
提示采用Rootstock,命令,但是已经过期了,依赖均失效,推荐采用live-build或者qeum。
按照http://manpages.ubuntu.com/manpa ... 7/live-build.7.html,采用lb 系列指令,是分为高级和低级命令,其中高级命令极其简单,但是使用受限较多。而且,因为定制,生成的rootfs是依赖于宿主机的,也就是虚拟机为i386的32位机,只能直接生成desktop版本的rootfs,还需要下载linaro的内核进行内核升级。经测试,因为网络不通畅,下载的文件有些校验不通过,反复测试也没有及时修复这个问题,因此,暂时,无法测试,等重新安装一个clean的版本后再测试本方法。
使用live-build分为5个阶段,最后一个阶段直接生成img文件,
lb_config(1)
配置环境
lb_bootstrap(1)
第一个阶段,准备文件并下载内核
lb_chroot(1)
第二个阶段
lb_binary(1)
第三个阶段,生成代码
lb_source(1)
第四个阶段,build
lb_clean(1),最后清除环境,完成设置。
文字与图片不对应,看着好乱啊。
你把这个文件系统烧到开发板上了么?
还是只是做出来了,能不能用不知道啊?
做出来但是没有调试通过,因为后面有评测计划就先完成了原来的计划再继续做。
其实,目前提供多个版本rootfs的厂家并不多,所以,这个linux from scratch不是按照教程做就一定可以做出来的。不过,我估计自己可以给myir做一版,就是投入的时间很多而已。我最后会提交给提交给myir的,但不会在这里分享的源码的。因为,我自己也不确定这样做是否满足授权协议。
前面讲启动部分copy别人的,而且不copy全也有道理,因为我确实没有标注引用出处,而且大篇幅删减,因为那个335部分的说明只是用来对比的。这个板子是A9的,这一部分如果别人愿意copy我是不介意的。
因为打字能力不行,确实希望大家来挑错,谢谢了。