在 AI 的協助下,大約花了3天的時間,把板子裝上最新的 Armbian OS。啟動後的畫面如下。
這塊主板上的標示為 "Raise3d Controller v2.0",自己 Google 找不到相關的資料,但 Gemini 就有,只能靠它了。
原來的系統是 Yocto,用在嵌入式系統中。在確認新的 Armbian OS 可以成功啟動後,把原來的 emmc 備份後,就整個刪除,只留 uboot 的部分。
最初,藉著 AI 的協助,進入原系統,修改密碼。因為能夠進入舊系統,在後來啟動 Armbian 上,也很有幫助。
這是我第一次進入 uboot,以往從來不知在啟動時,按任何鍵,就能進入 uboot,因為那時機,可能不到 5秒。最主要的是,進到 uboot 後,也不知能幹嘛。
複製 armbian image 到 SD
因為這個舊 uboot 沒有支援 ext4,所以要將 SD 另外切出 FAT 格式的 boot partition,然後將開機所需的檔,放在這個 partition。
到 Armbian 的 SoC: i.MX 6 網頁,下載 image。沒有為這塊板子建的 image,可下載 Cubox-i 的 image。
------------
# 抹除前 10MB,確保乾淨
sudo dd if=/dev/zero of=/dev/sdb bs=1M count=10
# 建立分割區
1. 512M , type: c
2. 剩下的,都給主系統
# format
sudo mkfs.vfat -F 32 -n "BOOT" /dev/sdb1
sudo mkfs.ext4 -L "ROOTFS" /dev/sdb2
$ sudo losetup -fP Armbian_25.5.1_Cubox-i_noble_current_6.6.90_minimal.img
$ lsblk /dev/loop*
。。。。
loop21 7:21 0 576K 1 loop /snap/snapd-desktop-integration/343
loop22 7:22 0 576K 1 loop /snap/snapd-desktop-integration/315
loop23 7:23 0 1.1G 0 loop
└─loop23p1 259:0 0 1.1G 0 part
loop23p1 259:0 0 1.1G 0 part
$ sudo mkdir /mnt/img
$ sudo mount /dev/loop23p1 /mnt/img
-- 複製 /boot 下的檔
$ sudo cp -rvp /mnt/img/boot/* /media/ajax/BOOT/
-- FAT 下,無法建立 symbolic link,只好手動 copy
$ cd /media/ajax/BOOT/
$ mv dtb-6.6.90-current-imx6 dtb
$ cp initrd.img-6.6.90-current-imx6 initrd.img
$ cp initrd.img-6.6.90-current-imx6 initrd.img.old
$ cp uInitrd-6.6.90-current-imx6 uInitrd
$ cp vmlinuz-6.6.90-current-imx6 vmlinuz
$ cp vmlinuz-6.6.90-current-imx6 vmlinuz.old
$ cp vmlinuz-6.6.90-current-imx6 zImage
$ sudo rsync -axHAX --progress --exclude='/boot/*' /mnt/img /media/ajax/ROOTFS/
$ sudo umount /mnt/img
$ sudo losetup -d /dev/loop10
-- 要 sync,檔案才會寫入
$ sync
------------必要時,要用舊系統開機,如確定原本的設定,可以使用備份的 image,依上述步驟,建立開機的 SD卡。
手動啟動測試
進入 uboot,能指定開機裝置,載入 kernel image,ramdisk image,dtb 檔,然後就能用 ramdisk 開機。ramdisk 開機後,就能執行 linux 的指令。若無法正常開機,如缺少需要的 module,可以重包 ramdisk image。
--------
# 1. 進入 SD 卡 (mmc 1 代表 SD 卡槽)
mmc dev 1
# 2. 載入 6.6 核心、ramdisk 與設備樹 (載入位址拉開距離)
fatload mmc 1:1 0x10800000 zImage
fatload mmc 1:1 0x13000000 uInitrd
fatload mmc 1:1 0x18000000 dtb/imx6q-sabresd.dtb
# 這裡直接指派裝置路徑試試 (mmcblk0 或 mmcblk1),也可以給 UUID
setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk2p2 rootwait rw'
# 啟動
bootz 0x10800000 0x13000000 0x18000000
--------設備樹可以用 imx6q-sabresd.dtb。但是下載的 image,uInitrd 中,缺少啟動 mmc 裝置的 module。所以把 uInitrd 展開後,加入所需的 module 後,再重新打包。
缺少的 module,包括 mmc/core/mmc_block.ko,以及 mmc/host 目錄下的 sdhci.ko,cqhci.ko,sdhci-pltfm.ko,sdhci-esdhc-imx.ko。
確認可從 SD 開機後,再把原來 EMMC 上的 root partition,format 成 ext4 格式,再用 rsync 把檔案都複製到 emmc 上。然後修改 boot 資料,即可順利自動啟動。
改用
修改 /etc/netplan/armbian.yaml,將 renderer 改為 NetworkManager。
----
# /etc/netplan/armbian.yaml
# 修改後,執行 sudo netplan apply
yaml
network:
version: 2
renderer: NetworkManager
-----移除 systemd-networkd-wait-online.service,不然沒連網路線時,開機要等 3分鐘。
-------
$ sudo systemctl disable --now systemd-networkd.service systemd-networkd.socket systemd-networkd-wait-online.service
Removed "/etc/systemd/system/dbus-org.freedesktop.network1.service".
Removed "/etc/systemd/system/sockets.target.wants/systemd-networkd.socket".
Removed "/etc/systemd/system/sysinit.target.wants/systemd-network-generator.service".
Removed "/etc/systemd/system/network-online.target.wants/systemd-networkd-wait-online.service".
Removed "/etc/systemd/system/multi-user.target.wants/systemd-networkd.service".
Disabling 'systemd-networkd.service', but its triggering units are still active:
systemd-networkd.socket
$ sudo systemctl restart NetworkManager
$ sudo systemctl mask systemd-networkd-wait-online.service
Created symlink /etc/systemd/system/systemd-networkd-wait-online.service → /dev/null.
---------
沒有留言:
張貼留言