AIO-3288J四核Cortex-A17高性能主板

采用RK3288四核Cortex-A17处理器,主频高达1.8GHz,集成四核Mali-T764 GPU,性能优异。板载4G LTE扩展接口、多种显示接口和通信串口。支持Android/Linux/Ubuntu系统,开放源代码方便企业二次开发。AIO-3288J的高性能、高可靠性、高扩展性,多系统等优势,让其可以快速应用于各种行业中。

创建 Ubuntu 根文件系统

更新时间:2017-12-18 阅读:843

    1 使用 miniroot 来创建并引导系统

    miniroot 的主页是:http://androtab.info/miniroot/

    miniroot 是个非常小巧的 shell 环境,用来安装和引导其它根文件系统,例如 Ubuntu, Gentoo, Arch Linux 等,这些系统可以在内核支持的存储设备的根或子目录上。这意味着我们能够从开发板的 eMMC Flash, 外置 TF 卡或 U 盘上安装多个系统,而且方便地切换系统,而不用修改并烧写 parameter 文件。


    miniroot 需要使用串口线来调试,参见[串口调试]一文。另外在下载系统映像时需要使用以太网,当然,也可以预先下载到移动存储设备上。

    1.1 准备

    请先备份好开发板及相关存储设备上的数据,以免操作失误或其它不可预见的因素带来的数据丢失。


    首先确保开发板已经烧写了可以正常工作的固件,然后下载以下映像文件::

    如果开发板安装的是 Android 或双系统固件,则将 linux-boot-miniroot.img 写到 recovery 分区,misc.img 写到 misc 分区。

    如果开发板安装的是 Linux固件,则将 linux-boot-miniroot.img 写到 boot 分区。

    miniroot 初次启动后,会进入 shell,在串口终端上可以见到提示符:

    miniroot#

    然后开始配置网络,如果是 DHCP 网络:

    miniroot# udhcpc

    否则就要手工配置网络参数(将192.168.1.* 替换成实际使用的网络地址):

    miniroot# ip addr add 192.168.1.2/24 broadcast + dev eth0
    miniroot# ip link set dev eth0 up
    miniroot# ip route add default via 192.168.1.1
    miniroot# echo nameserver 192.168.1.1 > /etc/resolv.conf

    miniroot 支持从目录里启动,这就意味着根文件系统的放置位置很灵活,而且可以方便地支持多种 Linux 发行版启动。

    下面用 TF 卡第一分区作为系统存储,创建 ext4 文件系统并挂载到 /mnt,ubuntu 将解压到 /mnt/ubuntu 下:

    miniroot# mkfs.ext4 -E nodiscard /dev/mmcblk0p1
    miniroot# mount /dev/mmcblk0p1 /mnt

    一般需要保证此分区有 4G 以上的剩余空间。

    1.2 下载和解压 ubuntu-core

    ubuntu-core 是最小的根文件系统,在安装之后根据需要再设置桌面或服务器环境。

    下载并解压到 /mnt :

    miniroot# cd /mnt
    miniroot# wget -P /mnt http://cdimage.ubuntu.com/ubuntu-core/releases/14.04/release/ubuntu-core-14.04-core-armhf.tar.gzminiroot# mkdir /mnt/ubuntu
    miniroot# tar -xpzf /mnt/ubuntu-core-14.04-core-armhf.tar.gz -C /mnt/ubuntu

    1.3 启动 Ubuntu

    • 设置主机名称

    miniroot# echo firefly > /mnt/ubuntu/etc/hostname
    miniroot# sed -e 's/miniroot/firefly/' < /etc/hosts > /mnt/ubuntu/etc/hosts
    • 设置串口控制台,自动以 root 用户登录:

    miniroot# sed -e 's/tty1/ttyS2/g' -e '/^exec/c exec /sbin/getty -a root -L 115200 ttyS2 vt100' \
              < /mnt/ubuntu/etc/init/tty1.conf > /mnt/ubuntu/etc/init/ttyS2.conf

    如果不能使用串口控制台,可以新增用户帐户(帐户和密码均是 "ubuntu"):

    miniroot# chroot /mnt/ubuntu useradd -G sudo -m -s /bin/bash ubuntu
    miniroot# echo ubuntu:ubuntu | chroot /mnt/ubuntu chpasswd
    • 启动 Ubuntu

    miniroot# boot /mnt:/ubuntu

    提示:如果根设备没有挂载,可以将冒号前的挂载目录替换成根设备文件,miniroot 会自动挂载:

    miniroot# boot /dev/mmcblk0p1:/ubuntu

    1.4 初始配置

    • 设置网络(DHCP)

    root@ubuntu:~# echo auto eth0 > /etc/network/interfaces.d/eth0
    root@ubuntu:~# echo iface eth0 inet dhcp >> /etc/network/interfaces.d/eth0
    root@ubuntu:~# ln -fs ../run/resolvconf/resolv.conf /etc/resolv.conf
    root@ubuntu:~# ifup eth0
    • 更新软件包

    root@ubuntu:~# apt-get update
    root@ubuntu:~# apt-get dist-upgrade
    • 重启

    root@ubuntu:~# reboot
    • 进入 miniroot,编辑环境变量,加入 ubuntu 的启动参数:

    miniroot# editenv
    boot=/dev/mmcblk0p1:/ubuntu
    init=/sbin/init
    autoboot=1
    • 保存环境变量并重启

    miniroot# saveenv
    miniroot# reboot -f

    1.5 安装软件包

    安装 Lubuntu (LXDE)桌面环境:

    root@ubuntu:~# apt-get install lubuntu-desktop


    1.6 固化系统

    将 TF 卡拔出,插入到主机系统,挂载到 /mnt 目录上。

    查看根文件系统所需空间的大小:

    sudo du -hs /mnt/ubuntu

    视情况对 /mnt/ubuntu 目录进行清理,特别是一些日志目录、临时目录等。

    生成空白磁盘映像文件,以生成 1G 大小的根文件系统磁盘映像文件为例:

    cd /new/firmware/work/dir/
    dd if=/dev/zero of=linuxroot.img bs=1M count=1024
    # 格式化成 ext4 文件系统格式,卷标为 linuxroot
    mkfs.ext4 -F -L linuxroot linuxroot.img

    挂载,拷贝数据,然后卸载:

    mount -o loop linuxroot.img /opt
    cp -a /mnt/ubuntu/ /opt/
    umount /opt

    这样 linuxroot.img 就是最终的根文件系统映像文件了。

    2 常见问题

    2.1 如何恢复正常启动

    往 misc 分区烧写 misc.img 后,开发板就会从 recovery 分区启动系统,要恢复回 boot 分区启动,有两种方法:

    1. 下载 misc_zero.img, 然后烧写到 misc 分区

    2. 在开发板的 Linux shell 下运行:

    sudo dd if=/dev/zero of=/dev/block/mtd/by-name/misc bs=16K count=count=3
    sudo sync
    sudo reboot

    3 参考链接