Firefly开源社区

12345... 9
发表新贴
打印 上一主题 下一主题

Firefly Ubuntu开发入门之(6)制作Ubuntu Rootfs镜像

950

积分

95

威望

72

贡献

超级版主

Rank: 8Rank: 8

积分
950

Firefly Ubuntu开发入门之(6)制作Ubuntu Rootfs镜像

发表于 2016-9-29 15:00:28      浏览:102500 | 回复:84        打印      只看该作者   [复制链接] 楼主
本帖最后由 牛头 于 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
    下载完后,解压到ubuntu目录:
mkdir ubuntu
sudo tar -xpf ubuntu-base-16.04-core-armhf.tar.gz -C ubuntu
    解压后,可以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 vim etc/apt/source.list
    加入如下两行内容,保存后退出:
deb http://ports.ubuntu.com/ubuntu-ports/ xenial main universe
deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial main universe
    经过上述步骤,已经对ubuntu根文件系统做了简单的配置,现在可以用工具切换到此根文件系统了。
   
    为了简化操作过程,这里使用一个切换根文件系统的脚本,点击下载。下载后,拷贝到~/UbuntuDev/rootfs目录,并增加可执行权限。用脚本挂载切换到指定的根文件系统,命令为:
cd ~/UbuntuDev/rootfs
chmod +x ch-mount.sh
./ch-mount.sh -m ubuntu/
    可以看到执行后,终端显示的用户名发生了变化,用ls可以看到文件系统也有变化,此终端里的根文件系统已经切换到binary目录里的根文件系统。可以在终端里做安装程序等操作了,就像进入了一个新系统,所以我也叫作是模拟运行根文件系统。

    这里我们实验性的给新系统装一些常用的工具:
apt-get install vim git openssh-server
    敲完回车,泡茶静静地等待吧,软件装得越多就越慢
    程序装完后,给系统增加一个叫ubuntu的管理员帐号:
useradd -s '/bin/bash' -m -G adm,sudo ubuntu
    修改ubuntu用户密码,回车后按提示输入两次密码
passwd ubuntu
    修改root帐号的密码,回车后按提示输入两次密码
passwd root
    对新系统的修改到此为止,准备打包镜像。
    退出chroot
exit
    用脚本载缷载退出根文件系统:
./ch-mount.sh -u ubuntu/

    终于要制作镜像了,用dd工具创建镜像文件:
dd if=/dev/zero of=ubuntu.img  bs=1M count=3000
    格式化镜像文件,并加入linuxroot卷标:
sudo mkfs.ext4 -F -L linuxroot ubuntu.img
    挂载镜像并往里面拷入修改后的文件系统:
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
    减小ubuntu.img镜像文件的大小:
resize2fs -M ubuntu.img
    执行上面两命令后,ubuntu.img瘦身不少,可以用来烧录了。

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

    接下来就是各种ubuntu的配置,如网络配置、安装图形桌面等等了。
    路漫漫其修远兮,但毕竟我们已经在路上。

回复

使用道具 举报

950

积分

95

威望

72

贡献

超级版主

Rank: 8Rank: 8

积分
950
发表于 2016-9-29 15:00:29        只看该作者  沙发
沙发
回复

使用道具 举报

168

积分

1

威望

0

贡献

技术小白

积分
168
发表于 2016-9-29 23:42:12        只看该作者  板凳
好,楼主威武。
回复

使用道具 举报

380

积分

0

威望

0

贡献

技术达人

Rank: 2

积分
380
发表于 2016-9-30 10:24:29        只看该作者  地板
备份下 ch-mount.sh
  1. #!/bin/bash

  2. function mnt() {
  3.     echo "MOUNTING"
  4.     sudo mount -t proc /proc ${2}proc
  5.     sudo mount -t sysfs /sys ${2}sys
  6.     sudo mount -o bind /dev ${2}dev

  7.     sudo chroot ${2}
  8. }

  9. function umnt() {
  10.     echo "UNMOUNTING"
  11.     sudo umount ${2}proc
  12.     sudo umount ${2}sys
  13.     sudo umount ${2}dev

  14. }


  15. if [ "$1" == "-m" ] && [ -n "$2" ] ;
  16. then
  17.     mnt $1 $2
  18. elif [ "$1" == "-u" ] && [ -n "$2" ];
  19. then
  20.     umnt $1 $2
  21. else
  22.     echo ""
  23.     echo "Either 1'st, 2'nd or both parameters were missing"
  24.     echo ""
  25.     echo "1'st parameter can be one of these: -m(mount) OR -u(umount)"
  26.     echo "2'nd parameter is the full path of rootfs directory(with trailing '/')"
  27.     echo ""
  28.     echo "For example: ch-mount -m /media/sdcard/"
  29.     echo ""
  30.     echo 1st parameter : ${1}
  31.     echo 2nd parameter : ${2}
  32. fi


复制代码
回复

使用道具 举报

380

积分

0

威望

0

贡献

技术达人

Rank: 2

积分
380
发表于 2016-9-30 10:28:04        只看该作者  5#
有个问题,安装配置完qemu-user-static,好像并没有使用到这个工具啊
回复

使用道具 举报

168

积分

1

威望

0

贡献

技术小白

积分
168
发表于 2016-9-30 12:49:12        只看该作者  6#
这个是国内的armhf  ubuntu的源,提供给大家参考

deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main restricted universe multiverse

deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main restricted universe multiverse

deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main restricted universe multiverse

deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main universe restricted
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main universe restricted

deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-updates main restricted universe multiverse
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-updates main restricted universe multiverse

deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-security main restricted universe multiverse
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-security main restricted universe multiverse

deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-backports main restricted universe multiverse

deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial main universe restricted
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial main universe restricted
已有 1评分威望 +1 收起 理由
luofeng2g + 1 很给力!

查看全部评分

回复

使用道具 举报

950

积分

95

威望

72

贡献

超级版主

Rank: 8Rank: 8

积分
950
发表于 2016-9-30 16:03:45        只看该作者  7#
csersoft 发表于 2016-9-30 10:28
有个问题,安装配置完qemu-user-static,好像并没有使用到这个工具啊


sudo cp /usr/bin/qemu-arm-static usr/bin/
这里用到啦,你可以不加这句去试试
回复

使用道具 举报

950

积分

95

威望

72

贡献

超级版主

Rank: 8Rank: 8

积分
950
发表于 2016-9-30 16:04:41        只看该作者  8#
wangdongx40423p 发表于 2016-9-30 12:49
这个是国内的armhf  ubuntu的源,提供给大家参考

deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial ...

阔以,谢谢了
回复

使用道具 举报

168

积分

1

威望

0

贡献

技术小白

积分
168
发表于 2016-9-30 17:31:56        只看该作者  9#
老大,能不能先公布一下网络的配置方法,现在系统启动起来了,没有网络,真的蛋疼,有了网络后面都好办了。
回复

使用道具 举报

950

积分

95

威望

72

贡献

超级版主

Rank: 8Rank: 8

积分
950
发表于 2016-9-30 17:35:20        只看该作者  10#
wangdongx40423p 发表于 2016-9-30 17:31
老大,能不能先公布一下网络的配置方法,现在系统启动起来了,没有网络,真的蛋疼,有了网络后面都好办了。

su root
dhclient eth0
前提是开发板有用以太网线连接到带DHCP服务的路由哦
回复

使用道具 举报

返回列表
12345... 9
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表