miniroot 是個非常小巧的 shell 環境,用來安裝和引導其它根文件系統,例如 Ubuntu, Gentoo, Arch Linux 等,這些系統可以在內核支持的存儲設備的根或子目錄上。這意味著我們能夠從開發板的 eMMC Flash, 外置 TF 卡或 U 盤上安裝多個系統,而且方便地切換系統,而不用修改并燒寫 parameter 文件。miniroot 需要使用串口線來調試,參見《串口調試》一文。另外在下載系統映像時需要使用以太網,當然,也可以預先下載到移動存儲設備上。
請先備份好開發板及相關存儲設備上的數據,以免操作失誤或其它不可預見的因素帶來的數據丟失。首先確保開發板已經燒寫了可以正常工作的固件,然后下載以下映像文件:
- misc.imghttps://pan.baidu.com/s/17Iw9QEMkUavOENZR9Xkqjw
- linux-boot-miniroot.imghttps://pan.baidu.com/s/1poSyJxMjFEGSYZsbna8Rag
如果開發板安裝的是 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 支持從目錄里啟動,這就意味著根文件系統的放置位置很靈活,而且可以方便地支持多種 Linux 發行版啟動。注意,由于調試串口與 TF 卡接口有信號引腳共用,因此不能同時使用。 下面用 U 盤第一分區作為系統存儲,創建 ext4 文件系統并掛載到 /mnt,ubuntu 將解壓到 /mnt/ubuntu 下:
miniroot# mkfs.ext4 -E nodiscard /dev/sda1 miniroot# mount /dev/sda1 /mnt
一般需要保證此分區有 4G 以上的剩余空間。
ubuntu-core 是最小的根文件系統,在安裝之后根據需要再設置桌面或服務器環境。下載并解壓到 /mnt :
miniroot# cd /mnt miniroot# wget -P /mnt http://cdimage.ubuntu.com/ubuntu-core/releases/15.04/release/ubuntu-core-15.04-core-armhf.tar.gz miniroot# mkdir /mnt/ubuntu miniroot# tar -xpzf /mnt/ubuntu-core-15.04-core-armhf.tar.gz -C /mnt/ubuntu
- 設置主機名稱
miniroot# echo ubuntu > /mnt/ubuntu/etc/hostname miniroot# sed -e 's/miniroot/ubuntu/' < /etc/hosts > /mnt/ubuntu/etc/hosts
新增用戶帳戶(帳戶和密碼均是 “ubuntu”):
miniroot# chroot /mnt/ubuntu useradd -G sudo -m -s /bin/bash ubuntu miniroot# echo ubuntu:ubuntu | chroot /mnt/ubuntu chpasswd
- 安裝必須的包
miniroot# mount -t proc none /mnt/ubuntu/proc miniroot# mount -t devtmpfs none /mnt/ubuntu/dev miniroot# cp /etc/resolv.conf /mnt/ubuntu/etc/ miniroot# chroot /mnt/ubuntu /bin/bash root@miniroot:/# apt-get update root@miniroot:/# apt-get install --no-install-recommends sudo iproute net-tools isc-dhcp-client root@miniroot:/# exit miniroot# rm /mnt/ubuntu/etc/resolv.conf miniroot# umount /mnt/ubuntu/proc miniroot# umount /mnt/ubuntu/dev
- 啟動 Ubuntu
miniroot# boot /mnt:/ubuntu /lib/systemd/systemd
提示:如果根設備沒有掛載,可以將冒號前的掛載目錄替換成根設備文件,miniroot 會自動掛載:
miniroot# boot /dev/sda1:/ubuntu /lib/systemd/systemd
- 串口登錄 Ubuntu
Ubuntu 15.04 ubuntu ttyFIQ0 ubuntu login: ubuntu Password: ubuntu Last login: Tue May 26 08:11:03 UTC 2015 on ttyFIQ0 Welcome to Ubuntu 15.04 (GNU/Linux 3.10.0 armv7l) * Documentation: https://help.ubuntu.com/ ubuntu@ubuntu:~$ sudo -s [sudo] password for ubuntu: ubuntu root@ubuntu:~#
- 設置網絡(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:~# cp /etc/apt/sources.list /etc/apt/sources.list.orig root@ubuntu:~# sed -i -e 's,^# deb\(.*\)$,deb\1,g' /etc/apt/sources.list root@ubuntu:~# apt-get update root@ubuntu:~# apt-get dist-upgrade
- 重啟
root@ubuntu:~# reboot
- 進入 miniroot,編輯環境變量,加入 ubuntu 的啟動參數:
miniroot# editenv boot=/dev/sda1:/ubuntu init=/lib/systemd/systemd autoboot=1
- 保存環境變量并重啟
miniroot# saveenv miniroot# reboot -f
安裝 Lubuntu (LXDE)桌面環境:
root@ubuntu:~# apt-get install lubuntu-desktop
將 U 盤卡拔出,插入到主機系統,掛載到 /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 -m 0 linuxroot.img
掛載,拷貝數據,然后卸載:
mount -o loop linuxroot.img /opt cp -a /mnt/ubuntu/* /opt/ umount /opt
這樣 linuxroot.img 就是最終的根文件系統映像文件了。
往 misc 分區燒寫 misc.img 后,開發板就會從 recovery 分區啟動系統,要恢復回 boot 分區啟動,有兩種方法:
- 下載 misc_zero.imghttps://pan.baidu.com/s/1L6stnnwFQhGX_eW4Ze8lSg , 然后燒寫到 misc 分區
- 在開發板的 Linux shell 下運行:
sudo dd if=/dev/zero of=/dev/block/mtd/by-name/misc bs=16K count=count=3 sudo sync sudo reboot
-
嵌入式主板
+關注
關注
7文章
6081瀏覽量
34942 -
安卓
+關注
關注
5文章
2107瀏覽量
56707 -
Firefly
+關注
關注
2文章
538瀏覽量
6930
發布評論請先 登錄
相關推薦
評論