2016年12月4日 星期日

客製化 u-boot (2016 版)

u-boot 客製化 (2016 年)

我們在使用 u-boot 時必須要手動輸入底下資訊才能成功開機:

setenv "root=/dev/mmcblk0p2 console=ttyAMA0"
fatload mmc 0:1 0x60008000 uimage
bootm 0x60008000

這主要原因是由於 u-boot 開機環境並沒有設定好,因此我們要來客製化 u-boot
原始碼,讓它可以照我們的要求來開機。請編輯:

u-boot-2016.09/include/configs/vexpress_common.h

這個檔案,修改以下片段:

#define CONFIG_EXTRA_ENV_SETTINGS \
                CONFIG_PLATFORM_ENV_SETTINGS \
                BOOTENV \
                "console=ttyAMA0,38400n8\0" \
                "dram=1024M\0" \
                "root=/dev/sda1 rw\0" \
                "mtd=armflash:1M@0x800000(uboot),7M@0x1000000(kernel)," \
                        "24M@0x2000000(initrd)\0" \
                "flashargs=setenv bootargs root=${root} console=${console} " \
                        "mem=${dram} mtdparts=${mtd} mmci.fmax=190000 " \
                        "devtmpfs.mount=0  vmalloc=256M\0" \
                "bootflash=run flashargs; " \
                        "cp ${ramdisk_addr} ${ramdisk_addr_r} ${maxramdisk}; " \
                        "bootm ${kernel_addr} ${ramdisk_addr_r}\0"


改為:

#define CONFIG_EXTRA_ENV_SETTINGS \
                CONFIG_PLATFORM_ENV_SETTINGS \
                BOOTENV \
                "console=ttyAMA0,38400n8\0" \
                "dram=1024M\0" \
                "root=/dev/mmcblk0p2 rw\0" \
                "flashargs=setenv bootargs root=${root} console=${console}\0" \
                "bootflash=run flashargs; " \
                "fatload mmc 0:1 0x60008000 uimage; " \
                "bootm 0x60008000\0"


然後重新編譯 u-boot,再把 u-boot u-boot.bin 複製到 /mnt/sdcard1 中。

之後請重新開機,看看這次還能不能直接開機,無需手動介入。

如何客製化 rootfs ? (2016 版)

如何客製化 rootfs ?

先前我們所完成的 rootfs 還沒有進行客製化,因此有一些部份還需要設定,例如:

1. root 密碼:leenix123
2. 新增一個使用者帳號 leenix/密碼: leenix123
3. 設定 locale (可裝/可不裝)
4. 設定網路
5. 設定 apt 來源
6. 架設 apache 伺服器
7. 設定主機名稱
8. 清理不必要檔案以節省空間

這些工作都需要在 chroot 環境裡實作,因此請先將 sd.img 裡的第 2 個分割區掛載至
/mnt/sdcard2 目錄下,然後執行:

# chroot /mnt/sdcard2
bash: warning: setlocale: LC_ALL: cannot change locale (zh_TW.UTF8)

==1==
此時我們已經在 /mnt/sdcard2 目錄下,首先我們要修改 root 密碼,請執行:

# echo root:leenix123 | chpasswd

==2==
接下來要新增使用者並設定密碼,請執行:

# useradd leenix
# echo leenix:leenix123 | chpasswd

==3==
接下來請設定語系,以免出現奇奇怪怪的訊息,請執行:

#dpkg-reconfigure locale

由於這是嵌入式系統,不是先前所使用的中文桌面環境,因此僅需要使用英文語系,請
設定 en_US.UTF-8 作為預設語系。

==4==
然後我們要設定網路,請編輯 /etc/network/interfaces,將其內容修改為:
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet static
address 192.168.10.100
netmask 255.255.255.0
gateway 192.168.10.1

之後我們將以 192.168.10.100 為連線主機檢查 apache server 是否有順利啟動。

==5==
要在虛擬 ARM 環境中安裝軟體跟 PC 版的流程是一樣的,因此要修改
/etc/apt/sources.list 這個設定檔,請將其內容改為:

deb http://opensource.nchc.org.tw/debian/ jessie main contrib non-free

deb http://security.debian.org/ jessie/updates main


==6==
修改完 apt 設定後接下來就可以設定 apache 伺服器,請執行:

# apt-get install apache2
# systemctl enable apache2


==7==
之後我們要設定 /etc/hostname 這個檔案以修改主機名稱,請執行

# echo arm_leenix > /etc/hostname

==8==
最後要離開系統前,請清除不必要的檔案:

# apt-get clean
# rm -rf /usr/share/doc/*
# rm -rf /usr/share/locale/*
# rm -rf /usr/share/man/*
# rm -rf /var/log/*

作完之後離開系統,並解除 /mnt/sdcard2 的掛載,解除 sd.img 的連接,然後重新再執
行虛擬 arm 主機,看能不能用 root 登錄。