顯示具有 rootfs 標籤的文章。 顯示所有文章
顯示具有 rootfs 標籤的文章。 顯示所有文章

2020年5月28日 星期四

SD Card 整合

SD Card 整合 #1
2020/05/29



整合至 sdcard.img #1

截至目前為止,我們已經完成了底下事項:
1. rootfs -> OK
2. linux kernel -> OK
3. boot loader (u-boot) -> OK
4. SD card image -> OK

現在要開始進行整合的步驟:
1+2+3 -> SD card -> qemu


1. 複製 Linux 核心至 /mnt/sdcard1

~eecs/virtualarm/kernel/linux-3.16.81/arch/arm/boot# cp uImage /mnt/sdcard1

2. 複製 u-boot 檔案至 /mnt/sdcard1

u-boot
u-boot.bin

~eecs/virtualarm/bootloader/u-boot-2016.09# cp u-boot /mnt/sdcard1
~eecs/virtualarm/bootloader/u-boot-2016.09# cp u-boot.bin /mnt/sdcard1

3. 複製 rootfs 目錄至 /mnt/sdcard2

~eecs/virtualarm# rsync -av rootfs/ /mnt/sdcard2

作完之後,我們先解除掛載,然後用 qemu 來開機。


4. 測試開機

~/virtualarm$ ~/virtualarm$ qemu-system-arm -machine vexpress-a9 -m 256 -nographic -kernel u-boot -drive file=../../sd_test.img,if=sd,format=raw,index=0


U-Boot 2016.09 (May 22 2020 - 09:58:23 +0800)

DRAM:  256 MiB
WARNING: Caches not enabled
Flash: 128 MiB
MMC:   MMC: 0
*** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
Net:   smc911x-0
Hit any key to stop autoboot:  0
=> fatload mmc 0:1 0x60000000 uimage

=> setenv bootargs console=ttyAMA0,38400n8 root=/dev/mmcblk0p2

=> bootm 0x60000000

此時即可開機,並以 root 或是 leenix 帳號登錄。

5. 與 br10 連接在一起

請將底下內容另存為  runsd.sh,再來執行即可。

MACHINE=vexpress-a9
#SD_IMAGE=sdcard.img
SD_IMAGE=sd_test.img
#SD_IMAGE=sd_512M.img

#FLASH_IMG=flash.img

KERNEL_VERSION=3.16.81
UBOOT_VERSION=2016.09

MAC="52:54:12:34:00:A0"
BRIDGE=br10


MEMORY=256
#MEMORY=1024

qemu-system-arm -machine $MACHINE -m $MEMORY \
  -serial stdio \
  -drive file=./$SD_IMAGE,if=sd,format=raw,index=0 \
  -kernel ./bootloader/u-boot-$UBOOT_VERSION/u-boot \
  -net nic,macaddr=$MAC -net bridge,br=$BRIDGE




2016年12月4日 星期日

如何客製化 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 登錄。

2012年11月2日 星期五

Rootfs 的改造

Rootfs 的改造

1. 瘦身
Q. 那些檔案可以宰 ?

在  $ROOTFS 目錄下執行

du -sh *

以觀看每個目錄所佔空間。

$ROOTFS/usr/share/man    -> 清除 man manual
$ROOTFS/usr/share/doc    -> 沒人看的文件
$ROOTFS/usr/share/locale -> 語系設定檔 (翻譯檔),僅留 en_US (+ zh_TW) 即可。

請移除舊版核心模組,並複製新版核心模組至此目錄

$ROOTFS/lib/modules                     -> 舊核心之驅動程式模組目錄
$ROOTFS/lib/modules/2.6.32-5-versatile  -> 移除
$ROOTFS/lib/modules/3.2.30              -> 新增
$ROOTFS/boot                            -> 舊版核心檔案,請全部清掉

$ROOTFS/var     ->
$ROOTFS/var/log -> 日誌檔目錄,可完全清除
$ROOTFS/var/cache/apt 目錄有套件的快取資料,可清除

2. 複製新檔案回去

a. 複製新 Linux 核心模組
   (不需要放 Linux 核心,因為其核心檔案放置至 sdcard 之第 1 個分割區)

3. 加入我們想要的設定

a. $ROOTFS/etc/fstab

proc            /proc        proc    defaults           0   0
/dev/mmcblk0p2   /           auto   errors=remount-ro   0   1
/dev/mmcblk0p1   /boot       auto   defaults            0   0

b. $ROOTFS/etc/inittab
最後一行加上:
T2:23:respawn:/sbin/getty -L ttyO2 115200 vt102

3. 複製至真正的 sdcard 中

請使用 fdisk 分割 sdcard (2 GB 以上),其中第 1 個分割區為 80 MB,剩下為第 2 個分割區。並依以下方式掛載:

/mnt/sdcard1 -> 第 1 個分割區,FAT 16/32 格式,有打開開機旗標。
/mnt/sdcard2 -> 第 2 個分割區,ext3 格式。

a. 複製核心、bootloader 及 uEnv.txt 至 /mnt/sdcard1,裡面內容如下:
-rwxr-xr-x 1 root root   45128 2012-10-30 22:19 MLO
-rwxr-xr-x 1 root root 1215711 2012-10-30 22:19 u-boot
-rwxr-xr-x 1 root root  294672 2012-10-30 22:19 u-boot.bin
-rwxr-xr-x 1 root root  294736 2012-10-30 22:19 u-boot.img
-rwxr-xr-x 1 root root       1 2012-10-30 23:29 uEnv.txt
-rwxr-xr-x 1 root root 2475616 2012-10-30 22:15 uImage


b. 複製 rootfs 至 /mnt/sdcard2,請使用 rsync 來複製

rsync -av $ROOTFS/* /mnt/sdcard2

4. 作完收工,可以至 devkit 8000 開機