本帖最后由 牛头 于 2016-9-29 15:09 编辑

很多朋友希望在拿到Firelfy发布的Ubuntu镜像后,会想自己加驱动或自己编译的内核等等,但做的过程中难免出现各种各样的问题。网上各种教程都不那么切题,讲解都不是那么细致,让人感到迷茫,又或许是无助。Firefly团队努力地在帮助开发者打破此困局,整理策划了系列教程,让开发者可以通过Firefly开源平台可以快速上手开发,并快速打造出成熟产品。

“创新 开源 分享 定制”是我们的口号,我们一直在努力。

之前教程已经讲完如何替换kernel及boot 镜像制作,今天讲如何制作Ubuntu Rootfs镜像。本文主要讲解镜像制作的流程,Ubuntu系统本身的配置优化等不在本文范围。以前介绍的Rootfs镜像制作方法,需要用到miniroot工具在开发板上来操作,方法比较原始复杂。现在有新的方法,可以在PC主机上制作完可烧录的Rootfs镜像,比较方便,参考价值高。

让我们上路吧。

首先从ubuntu官方下载ubuntu core,就是ubuntu根文件系统的核心部分,没有图形界面等等,简单说就是要啥没啥的效果:

cd ~/UbuntuDev/

mkdir rootfs

cd rootfs

jcjt61.png (53.28 KB, 下载次数: 239)

2016-9-29 14:25 上传

下载完后,解压到ubuntu目录:

mkdirubuntu

sudo tar -xpf ubuntu-base-16.04-core-armhf.tar.gz -C ubuntu

jcjt62.png (23.07 KB, 下载次数: 222)

2016-9-29 14:25 上传

解压后,可以ls看看,这就是最小化的ubuntu根文件系统,可以直接用来生成镜像,但里面基本是要啥没啥。如何可以预置一些程序呢,如vim,openssh-server,git什么的工具。办法是有的:在PC里模拟运行这个根文件系统,运行后安装配置一些需要预置的程序,再把此根文件系统打包成固件。

在PC上模拟运行根文件系统,需要安装一个工具:

sudo apt-get install qemu-user-static

另外,在切换到此根文件系统前,要对根文件系统做一些配置修改,copy qemu:

cd ubuntu

sudo cp /usr/bin/qemu-arm-static usr/bin/

拷贝PC主机端的dns配置,因为待会安装程序时要用网络:

sudo cp -b /etc/resolv.conf  etc/resolv.conf

增加软件源:

sudo vimetc/apt/source.list

加入如下两行内容,保存后退出:

jcjt63.png (23.47 KB, 下载次数: 219)

2016-9-29 14:25 上传

经过上述步骤,已经对ubuntu根文件系统做了简单的配置,现在可以用工具切换到此根文件系统了。

为了简化操作过程,这里使用一个切换根文件系统的脚本,点击下载。下载后,拷贝到~/UbuntuDev/rootfs目录,并增加可执行权限。用脚本挂载切换到指定的根文件系统,命令为:

cd ~/UbuntuDev/rootfs

chmod +x ch-mount.sh

./ch-mount.sh -m ubuntu/

jcjt64.png (34.7 KB, 下载次数: 215)

2016-9-29 14:25 上传

可以看到执行后,终端显示的用户名发生了变化,用ls可以看到文件系统也有变化,此终端里的根文件系统已经切换到binary目录里的根文件系统。可以在终端里做安装程序等操作了,就像进入了一个新系统,所以我也叫作是模拟运行根文件系统。

这里我们实验性的给新系统装一些常用的工具:

apt-get install vim git openssh-server

jcjt65.png (10.3 KB, 下载次数: 213)

2016-9-29 14:25 上传

敲完回车,泡茶静静地等待吧,软件装得越多就越慢。

程序装完后,给系统增加一个叫ubuntu的管理员帐号:

useradd -s '/bin/bash' -m -G adm,sudo ubuntu

修改ubuntu用户密码,回车后按提示输入两次密码:

passwd ubuntu

修改root帐号的密码,回车后按提示输入两次密码:

passwd root

jcjt66.png (32.44 KB, 下载次数: 220)

2016-9-29 14:25 上传

对新系统的修改到此为止,准备打包镜像。

退出chroot:

exit

jcjt67.png (9.3 KB, 下载次数: 230)

2016-9-29 14:25 上传

用脚本载缷载退出根文件系统:

./ch-mount.sh -u ubuntu/

jcjt68.png (7.5 KB, 下载次数: 232)

2016-9-29 14:25 上传

终于要制作镜像了,用dd工具创建镜像文件:

dd if=/dev/zero of=ubuntu.img  bs=1M count=3000

jcjt69.png (17.12 KB, 下载次数: 221)

2016-9-29 14:25 上传

格式化镜像文件,并加入linuxroot卷标:

sudo mkfs.ext4 -F-L linuxrootubuntu.img

jcjt610.png (70.08 KB, 下载次数: 232)

2016-9-29 14:25 上传

挂载镜像并往里面拷入修改后的文件系统:

mkdir ubuntu-mount

sudo mount  ubuntu.img ubuntu-mount

sudo cp -rfp ubuntu/* ubuntu-mount

缷载镜像:

sudo umount ubuntu-mount

这样ubuntu.img里就已经有刚才制作的根目录内容了,但ubuntu.img文件大小却是定义的分区大小,不是文件系统的实际大小,所以还要经过一些处理才能发布。

检查并修复ubuntu.img镜像的文件系统,不熟悉的朋友可以通过网络了解此工具:

e2fsck -p -f ubuntu.img

jcjt611.png (22.9 KB, 下载次数: 229)

2016-9-29 14:25 上传

减小ubuntu.img镜像文件的大小:

resize2fs -M ubuntu.img

jcjt612.png (27.9 KB, 下载次数: 216)

2016-9-29 14:25 上传

执行上面两命令后,ubuntu.img瘦身不少,可以用来烧录了。

启动后,效果刚刚的,顺利启动到字符终端模式,可以通过键盘登陆ubuntu帐号。

jcjt613.png (487.03 KB, 下载次数: 224)

2016-9-29 14:48 上传

接下来就是各种ubuntu的配置,如网络配置、安装图形桌面等等了。

路漫漫其修远兮,但毕竟我们已经在路上。

更多推荐