轉自:http://www.cnblogs.com/qiaoqiao2003/p/3738552.htmlhtml
Debian系統自己包含對arm的支持,其包含的軟件包最多,可是最終的文件系統要大一些。linux
emdebian 是一個很是好用的嵌入式linux操做系統,其基於debian的特色對於熟悉debian系統的人來講很容易就能駕輕就熟地進行配置。shell
emdebian有好幾個版本:Grip,Crush,Baked. 關於它們的詳細介紹能夠查看:http://www.emdebian.org/emdebian/flavours.htmlbootstrap
一般爲了便於使用,咱們選擇Grip版本。bash
debian下有三個工具能夠用來建立根文件系統,它們分別是Debootstrap、CDebootstrap和Multistrap,安裝這幾個軟件:app
apt-get install debootstrap multistrap
本文中內容主要參考debian網站的CrossDebootstrap。less
debootstrap --foreign --arch armel wheezy rootfs http://ftp.debian.org/debian/
會在當前的rootfs下創建一個基本的根文件系統(名字爲rootfs),而後將rootfs文件家移到nfs對應文件夾下,並重啓nfs:工具
/etc/init.d/nfs-kernel-server restart
啓動mini2440,按任意鍵進入uboot,按'q'鍵進入uboot命令行,將bootargs修改爲如下內容:網站
noinitrd root=/dev/nfs rw nfsroot=192.168.211.2:/home/host/nfs/mini2440/rootfs ip=192.168.211.211 console=ttySAC0 init=/bin/bash
重啓mini2440,可是沒法進入跟文件系統,提示下面的錯誤:ui
Warning: unable to open an initial console.
參考http://blog.chinaunix.net/uid-10008293-id-2972298.html ,在根文件系統下建立設備文件console和null:
cd rootfs/dev mknod -m 660 console c 5 1 mknod -m 660 null c 1 3
而後重啓mini2440,就能夠進入根文件系統了。
而後在新的根文件系統下進行配置:
DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true LC_ALL=C LANGUAGE=C LANG=C /debootstrap/debootstrap --second-stage
可是安裝base-file是提示出錯,查看/debootstrap/debootstrap.log才知道執行rmdir /var/run出錯。
用ls命令能夠知道該文件夾下存在一個臨時文件,將該臨時文件刪除。而後再次執行上面的命令,可是在安裝 mount時提示下面的錯誤:
dpkg: error processing /var/cache/apt/archives/mount_2.20.1-5.3_armel.deb (--unpack):
而後就開始嘗試從新開始安裝這些deb包,默認狀況下會重試5次纔會中止執行。嘗試了半天,可是安裝過程當中的錯誤很難追蹤和修正,
我最終放棄了使用debootstrap製做基於debian的根文件系統.
步驟跟上面過程相似,先下載deb包:
debootstrap --foreign --arch armel --keyring=/usr/share/keyrings/emdebian-archive-keyring.gpg squeeze rootfs http://www.emdebian.org/grip
安裝qemu-user-static包,並將qemu-arm-static拷貝到rootfs下(該工具用於避免chroot出錯):
apt-get install qemu-user-static
cp /usr/bin/qemu-arm-static rootfs/usr/bin
而後安裝deb包:
chroot rootfs /bin/bash /debootstrap/debootstrap --second-stage
安裝過程當中提示安裝dash出錯,執行」dpkg -i /var/cache/apt/archives/dash_0.5.5.1-7.4em1_armel.deb」能夠獲得下面的輸出信息:
(Reading database ... 3895 files and directories currently installed.) Unpacking dash (from .../dash_0.5.5.1-7.4em1_armel.deb) ... /bin/ln: creating symbolic link `/usr/share/man/man1/sh.1.gz.tmp': No such file or directory dpkg: error processing /var/cache/apt/archives/dash_0.5.5.1-7.4em1_armel.deb (--install): subprocess new pre-installation script returned error exit status 1 Errors were encountered while processing: /var/cache/apt/archives/dash_0.5.5.1-7.4em1_armel.deb
因爲/usr/share/man文件夾不存在,因此沒法建立軟連接,建立文件夾:
mkdir -p /usr/share/man/man1/
而後再次執行:
/debootstrap/debootstrap --second-stage
再執行下面的命令進行配置:
echo "deb http://www.emdebian.org/grip/ squeeze main" >> rootfs/etc/apt/sources.list printf "auto eth0\niface eth0 inet dhcp\n" >> /etc/network/interfaces
而後再將該採用nfs啓用根文件系統方式啓動mini2440,可是進入bash前有個錯誤提示:
bash: cannot set terminal process group (-1): Inappropriate ioctl for device bash: no job control in this shell
這個問題暫時做爲遺留問題,有空再來研究。
該文件系統大小在七、80M左右。
cdebootstrap --foreign --arch armel wheezy rootfs http://ftp.debian.org/debian/
而後仍然用nfs啓動根文件系統(選擇和上面同樣的bootargs),就能進入剛纔製做的根文件系統。
而後用下面命令來完成deb包的解壓縮和安裝:
/sbin/cdebootstrap-foreign
而後執行下面的命令對全部未配置的deb包進行配置:
PATH=/usr/bin:/bin:/usr/sbin:/sbin dpkg --configure -a
如今基礎的一些配置就弄好了,當前rootfs大小在200多M左右。
整個過程很是流暢,沒有出現關鍵性錯誤致使安裝失敗的狀況發生。
而後在對系統進行配置:
mount -t proc proc /proc route add default gw 192.168.211.1
而後再根據本身須要對/etc/apt/sources.list進行配置(可參考https://lug.ustc.edu.cn/repogen/)
cdebootstrap --foreign --arch armel --keyring=/usr/share/keyrings/emdebian-archive-keyring.gpg squeeze rootfs http://www.emdebian.org/grip
可是顯示了下面的錯誤信息:
P: Retrieving InRelease P: Validating InRelease I: Good signature from "Emdebian Archive Signing Key" P: Parsing InRelease W: parser_rfc822: Iek! Don't find end of field, it seems to be after the end of the line! E: Couldn't parse InRelease!
因此後續過程也沒法繼續下去了。
最後使用multistrap製做根文件系統。
建立配置文件,名稱爲multistrap_debian.conf,內容以下:
[General] noauth=true unpack=true debootstrap=Squeeze aptsources=Squeeze arch=armel [Squeeze] packages=wpasupplicant wireless-tools firmware-ralink busybox netbase net-tools makedev source=http://ftp.au.debian.org/debian/ keyring=debian-archive-keyring components=main non-free suite=squeeze
而後執行下面的命令下載deb包並解壓縮:
multistrap -a armel -d rootfs -f multistrap_debian.conf
執行完畢後將qemu-arm-static拷貝到rootfs/usr/bin下
cp /usr/bin/qemu-arm-static rootfs/usr/bin
而後chroot進入rootfs,進行配置:
chroot rootfs touch /etc/fstab mount -t proc proc /proc dpkg --configure -a
而後在mini2440下設置nfs啓動根文件系統,配置與前面配置相同,但會有錯誤提示(不影響通常使用):
bash: cannot set terminal process group (-1): Inappropriate ioctl for device bash: no job control in this shell
暫時做爲遺留問題,留待解決。
整個文件系統大小在160M左右。
先建立配置文件,名稱爲multistrap_emdebian.conf,內容以下:
[General]
noauth=true
unpack=true
debootstrap=Grip
aptsources=Grip
[Grip]
# space separated package list
packages=busybox netbase net-tools ifupdown makedev
source=http://www.emdebian.org/grip
suite=squeeze
該文件中須要注意的是suite,suite類型有四種:etch,lenny,squeeze,sid分別對應oldstabe,stable,tesing,sid。
看名字基本能明白含義,只有sid不容易看明白,實際上sid表示滾動更新版本
執行下面命令製做根文件系統:
multistrap -a armel -d rootfs -f multistrap_emdebian.conf
很快就能夠下載成功,並自動將deb包解壓縮根文件系統下。
將/usr/bin/qemu-arm-static拷貝到rootfs/usr/bin下,而後執行以下命令進行安裝後的配置:
chroot rootfs dpkg --configure -a
在配置過程當中須要選擇時區,分別選擇6(Asia)和65(Shanghai).
重啓mini2440,採用nfs啓動根文件系統(和本文前面的配置同樣),但仍然會有一個錯誤(不影響通常使用):
bash: cannot set terminal process group (-1): Inappropriate ioctl for device bash: no job control in this shell
這個問題仍然留待後續再解決。
生成根文件系統大小在50M左右
從前面陳述的根文件系統製做過程能夠看到,mutlstrap比較利於擴展,使用也比較方便,因此我傾向於之後採用multistrap來製做根文件系統