[boostrap]debian下爲arm建立debian和emdebian文件系統

轉自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網站的CrossDebootstrapless

 

先用Debootstrap製做基於debian根文件系統(詳見官方文檔):

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的根文件系統.

 

1.下面用debootstrap來安裝基於emdebian的根文件系統(參考文章http://www.linuxidc.com/Linux/2011-11/47804.htm):

步驟跟上面過程相似,先下載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左右。

 

2.我下面選擇用CDebootsrap(用c語言開發的debootstrap相似工具,比debootstrap快不少)來製做基於debian的根文件系統,執行下面命令:

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/

 

3.接着使用CDebootstrap來製做基於emdebian的跟文件系統,執行下面的命令:

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的根文件系統:

建立配置文件,名稱爲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左右。

 

4.最後用multistrap製做基於emdebian的根文件系統。

先建立配置文件,名稱爲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來製做根文件系統

相關文章
相關標籤/搜索