linux根文件系統製做

嵌入式中移植的內核下載到開發板上,是沒有辦法真正的啓動Linux操做系統的,會出現沒法加載文件系統的錯誤。node

那麼根文件系統在系統啓動中究竟是何時掛載的呢?先將/dev/ram0掛載,然後執行/linuxrc.等其執行完後。切換根目錄,再掛載具體的根文件系統.根文件系統執行完以後,也就是到了Start_kernel()函數的最後,執行init的進程,也就第一個用戶進程。對系統進行各類初始化的操做。linux

根文件系統之因此在前面加一個」根「,說明它是加載其它文件系統的」根「,既然是根的話,那麼若是沒有這個根,其它的文件系統也就沒有辦法進行加載的。它包含系統引導和使其餘文件系統得以掛載(mount)所必要的文件。根文件系統包括Linux啓動時所必須的目錄和關鍵性的文件算法

一.建立基本目錄shell

1.通常咱們的rootfs目錄會建在/opt目錄下,但我爲了避免覆蓋之前存在的rootfs,我在home目錄下鍵rootfs目錄進行根文件系統製做vim

[weishusheng@localhost ~]$ mkdir rootfs安全

 

2.在目錄下建立各子目錄app

mkdir -pssh

{apps,bin,data,dev,info,proc,root,sbin,sys,tmp,var,etc/{,init.d,dropbear},mnt/{,usb,sdc,nfs,dev},usr/{,bin,sbin,lib,share},lib/{,modules/{,3.0.0}}}tcp

 

3.dev目錄下建立設備文件,由於內核掛載完文件系統後,init進程須要用到/dev/console和/dev/null這兩個設備文件來調用mdev構建dev,因此必須在製做文件系統時靜態建立這兩個設備文件,不然在系統啓動時將提示:Waring:unable to open an initial console:ide

執行:

[weishusheng@localhost rootfs]$ sudo mknod -m666 dev/null c 1 3
[weishusheng@localhost rootfs]$ sudo mknod -m666 dev/console c 5 1
[weishusheng@localhost rootfs]$ sudo mknod -m666 dev/ttyS0 c 4 64
[weishusheng@localhost rootfs]$ sudo mknod -m666 dev/ttySAC0 c 4 64
[weishusheng@localhost rootfs]$ sudo mknod dev/mtdblock0 b 31 0
[weishusheng@localhost rootfs]$ sudo mknod dev/mtdblock1 b 31 1
[weishusheng@localhost rootfs]$ sudo mknod dev/mtdblock2 b 31 2
[weishusheng@localhost rootfs]$ sudo mknod dev/mtdblock3 b 31 3
[weishusheng@localhost rootfs]$ sudo mknod dev/mtdblock4 b 31 4
[weishusheng@localhost rootfs]$ sudo mknod dev/mtdblock5 b 31 5
[weishusheng@localhost rootfs]$ sudo mknod dev/mtdblock6 b 31 6
[weishusheng@localhost rootfs]$ sudo mknod dev/mtdblock7 b 31 7
[weishusheng@localhost rootfs]$ sudo mknod dev/mtdblock8 b 31 8
[weishusheng@localhost rootfs]$ sudo mknod dev/mtdblock9 b 31 9

 

[weishusheng@localhost rootfs]$ ls -l dev/
total 0
crw-rw-rw- 1 root root 5, 1 Aug 23 10:46 console
brw-r--r-- 1 root root 31, 0 Aug 23 10:47 mtdblock0
brw-r--r-- 1 root root 31, 1 Aug 23 10:47 mtdblock1
brw-r--r-- 1 root root 31, 2 Aug 23 10:47 mtdblock2
brw-r--r-- 1 root root 31, 3 Aug 23 10:47 mtdblock3
brw-r--r-- 1 root root 31, 4 Aug 23 10:47 mtdblock4
brw-r--r-- 1 root root 31, 5 Aug 23 10:48 mtdblock5
brw-r--r-- 1 root root 31, 6 Aug 23 10:48 mtdblock6
brw-r--r-- 1 root root 31, 7 Aug 23 10:48 mtdblock7
brw-r--r-- 1 root root 31, 8 Aug 23 10:48 mtdblock8
brw-r--r-- 1 root root 31, 9 Aug 23 10:48 mtdblock9
crw-rw-rw- 1 root root 1, 3 Aug 23 10:46 null
crw-rw-rw- 1 root root 4, 64 Aug 23 10:46 ttyS0
crw-rw-rw- 1 root root 4, 64 Aug 23 10:47 ttySAC0

 

4.var目錄下建立符號連接文件

[weishusheng@localhost rootfs]$ ln -s /tmp var/lock
[weishusheng@localhost rootfs]$ ln -s /tmp var/log
[weishusheng@localhost rootfs]$ ln -s /tmp var/run
[weishusheng@localhost rootfs]$ ln -s /tmp var/tmp
[weishusheng@localhost rootfs]$ ls -l var/
total 0
lrwxrwxrwx 1 weishusheng weishusheng 4 Aug 23 10:53 lock -> /tmp
lrwxrwxrwx 1 weishusheng weishusheng 4 Aug 23 10:53 log -> /tmp
lrwxrwxrwx 1 weishusheng weishusheng 4 Aug 23 10:54 run -> /tmp
lrwxrwxrwx 1 weishusheng weishusheng 4 Aug 23 10:54 tmp -> /tmp

 

5.拷貝交叉編譯器中的動態庫到相應的目錄下

[weishusheng@localhost rootfs]$ cp -af /opt/buildroot-2011.11/arm920t/usr/arm-linux/sysroot/lib/*so* lib/

[weishusheng@localhost rootfs]$ cp -af /opt/buildroot-2011.11/arm920t/usr/arm-linux/lib/*so* lib/

[weishusheng@localhost rootfs]$ ls lib/
ld-uClibc-0.9.32.so libdl-0.9.32.so libm.so.0 libresolv-0.9.32.so libutil-0.9.32.so
ld-uClibc.so.0 libdl.so.0 libnsl-0.9.32.so libresolv.so.0 libutil.so.0
libc.so.0 libgcc_s.so libnsl.so.0 librt-0.9.32.so modules
libcrypt-0.9.32.so libgcc_s.so.1 libpthread-0.9.32.so librt.so.0
libcrypt.so.0 libm-0.9.32.so libpthread.so.0 libuClibc-0.9.32.so
[weishusheng@localhost rootfs]$

6.目錄下建立一些文件

[weishusheng@localhost rootfs]$ cd etc/
[weishusheng@localhost etc]$ ll
total 8
drwxrwxr-x 2 weishusheng weishusheng 4096 Aug 23 10:40 dropbear
drwxrwxr-x 2 weishusheng weishusheng 4096 Aug 23 10:40 init.d

 

[lingyun@localhost etc]$ ls
dropbear init.d
[lingyun@localhost etc]$ vim inittab
# /etc/inittab
#
# Copyright (C) 2014-8-23 weishusheng
#
# Note: BusyBox init doesn't support runlevels. The runlevels field is
# completely ignored by BusyBox init. If you want runlevels, use sysvinit.
#
# Format for each entry: <id>:<RUnlevels>:<action>:<process>
#
# id == tty to run on, or empty for /dev/console.
# If specified, then /dev/$id device must exist
# runlevels == ignored, busybox doesn't support it
# action == one of sysinit, respawn, askfirst, wait, and once
# process == program to run

# Startup the system
# mount all the file systems specified in /etc/fstab
::sysinit:/bin/mount -a

#Use mdev as hotplug to auto mount USB storage or SD card
::sysinit:/bin/echo /sbin/mdev > /proc/sys/kernel/hotplug

#Use mdev to auto generate the device node in /dev path
::sysinit:/sbin/mdev -s

#make shm, pts support
::sysinit:/bin/mkdir -p /dev/pts
::sysinit:/bin/mkdir -p /dev/shm
::sysinit:/bin/mount -t devpts devpts /dev/pts

#Mount our apps/info partition
null::wait:/bin/mount -o sync,noatime,ro -t jffs2 /dev/mtdblock6 /apps
null::wait:/bin/mount -o sync,noatime,ro -t jffs2 /dev/mtdblock7 /info

#Set hostname
null::sysinit:/bin/hostname -F /etc/hostname

#Enable console logon
null::respawn:/sbin/getty -L ttyS0 115200 vt100

# now run any rc scripts
null::wait:/etc/init.d/rcS

# system daemon
null::respawn:/sbin/syslogd -n
null::respawn:/sbin/klogd -n

# Stuff to do before rebooting
null::shutdown:/bin/umount /apps
null::shutdown:/bin/umount /info
null::shutdown:/bin/killall klogd
null::shutdown:/bin/killall syslogd

null::shutdown:/bin/umount -a -r
#null::shutdown:/sbin/swapoff -a

 

7.建立/etc/init.d/rcS腳本

[weishusheng@localhost etc]$ vim init.d/rcS
#!/bin/sh

# Copyright (C) 2014-8-23 weishusheng
# Start all init scripts in /etc/init.d
# executing them in numerical order.
#

for i in /etc/init.d/S??* ; do
$i
done

 

8.配置網卡的啓動腳本

[weishusheng@localhost etc]$ vim init.d/S01_network
#!/bin/sh

ifconfig eth0 192.168.1.111 netmask 255.255.255.0 up

9.etc目錄下的啓動腳本

[weishusheng@localhost etc]$ vim init.d/S99_rcsApp
#!/bin/sh

# Copyright (C) 2014-08-23 weishusheng
#
# Start all init scripts in /apps/etc/init.d
# executing them in numerical order.
#
if (test -d /apps/etc/init.d)
then
for i in /apps/etc/init.d/S??* ; do
$i
done
fi

 

10.修改init.d目錄下的文件權限

chmod 777 init.d/*

[weishusheng@localhost etc]$ ll init.d/*
-rwxrwxrwx 1 weishusheng weishusheng 64 Aug 23 11:11 init.d/S01_network
-rwxrwxrwx 1 weishusheng weishusheng 234 Aug 23 11:21 init.d/S99_rcsApp
-rwxrwxrwx 1 weishusheng weishusheng 208 Aug 23 11:09 init.d/rcS

 

11.建立fstab文件

[weishusheng@localhost etc]$ vim fstab
# /etc/fstab: static file system information.
# Copyright (C) 2014-08-23 weishusheng
#
#<File system> <mount pt> <type> <options> <dump> <pass>
#devpts /dev/pts devpts defaults 0 0
#/dev/root / ext2 rw,noauto 0 1
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0

 

12.建立hostname,hosts,TZ文件

[weishusheng@localhost etc]$ echo "root" > hostname
[weishusheng@localhost etc]$ echo "127.0.0.1 localhost" >> hosts
[weishusheng@localhost etc]$ echo "MST7MDT" >> TZ
[weishusheng@localhost etc]$ echo "Copyright (C) 2014 weishusheng" >> issue      #系統啓動時的啓動信息

13.建立profile文件

[weishusheng@localhost etc]$ vim profile

# /etc/profile: system-wide .profile file for the Bourne shells.

 

export PATH=\

/bin:\

/sbin:\

/usr/bin:\

/usr/sbin:\

/usr/local/bin:\

/apps/bin:\

/apps/tools:\

/apps/tslib/bin\

 

# If running interactively, then:

if [ "$PS1" ]; then

 

    if [ "$BASH" ]; then

        export PS1="[\u@\h \W]\\$ "

        alias ll='/bin/ls --color=tty -laFh'

        alias ls='/bin/ls --color=tty -F'

        export

        

LS_COLORS='no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:ex=01;

32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.deb=0

1;31:*.rpm=01;31:*.jar=01;31:*.jpg=01;35:*.jpeg=01;35:*.png=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35

:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.mpg=01;35:*.mpeg=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.d

l=01;35:*.xcf=01;35:*.xwd=01;35:';

    else

      if [ "`id -u`" -eq 0 ]; then

        export PS1='>: '

      else

        export PS1='>: '

      fi

    fi

# System Setting

    set -o vi

    alias  ll='ls -l'

    export USER=`id -un`

    export LOGNAME=$USER

    export HOSTNAME=`/bin/hostname`

    export HISTSIZE=1000

    export HISTFILESIZE=1000

    export PAGER='/bin/more '

    export EDITOR='/bin/vi'

    export INPUTRC=/etc/inputrc

    export DMALLOC_OPTIONS=debug=0x34f47d83,inter=100,log=logfile

    export VAR1=

    export VAR2=

    export VAR3=

    export VAR4=

    export VAR5=

    export LD_LIBRARY_PATH=/lib:/usr/lib/

# QT Extendded 4.4.3 Setting

    export QTDIR=/apps/qt-extended-4.4.3

    export QWS_MOUSE_PROTO='TSLIB:/dev/event0'

    export QWS_DISPLAY='LinuxFB:/dev/fb0'

    export QWS_DISPLAY='LinuxFB:mmWidth240:mmHeight320:0'

    export QWS_SIZE='240x320'

    export QT_PLUGIN_PATH=$QTDIR/plugins/

    export QT_QWS_FONTDIR=$QTDIR/lib/fonts

    export PATH=$QTDIR/bin:$PATH

    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$QTDIR/lib

# Touch Scree tslib Setting

    export TSLIB_ROOT=/apps/tslib

    export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf

    export TSLIB_CALIBFILE=$TSLIB_ROOT/etc/pointercal

    export TSLIB_TSDEVICE=/dev/event0

    export TSLIB_CONSOLEDEVICE=none

    export TSLIB_FBDEVICE=/dev/fb0

fi;

14.建立指定一些協議所使用的端口號文件protocols

[weishusheng@localhost etc]$ vim protocols

# /etc/protocols:

# $Id: protocols,v 1.1.1.1 2001/09/12 19:03:24 andersee Exp $

#

# Internet (IP) protocols

#

#       from: @(#)protocols     5.1 (Berkeley) 4/17/89

#

# Updated for NetBSD based on RFC 1340, Assigned Numbers (July 1992).

 

ip      0       IP              # internet protocol, pseudo protocol number

icmp    1       ICMP            # internet control message protocol

igmp    2       IGMP            # Internet Group Management

ggp     3       GGP             # gateway-gateway protocol

ipencap 4       IP-ENCAP        # IP encapsulated in IP (officially ``IP'')

st      5       ST              # ST datagram mode

tcp     6       TCP             # transmission control protocol

egp     8       EGP             # exterior gateway protocol

pup     12      PUP             # PARC universal packet protocol

udp     17      UDP             # user datagram protocol

hmp     20      HMP             # host monitoring protocol

xns-idp 22      XNS-IDP         # Xerox NS IDP

rdp     27      RDP             # "reliable datagram" protocol

iso-tp4 29      ISO-TP4         # ISO Transport Protocol class 4

xtp     36      XTP             # Xpress Tranfer Protocol

ddp     37      DDP             # Datagram Delivery Protocol

idpr-cmtp       39      IDPR-CMTP       # IDPR Control Message Transport

rspf    73      RSPF            #Radio Shortest Path First.

vmtp    81      VMTP            # Versatile Message Transport

ospf    89      OSPFIGP         # Open Shortest Path First IGP

ipip    94      IPIP            # Yet Another IP encapsulation

encap   98      ENCAP           # Yet Another IP encapsulation

 

15.建立mdev.conf文件

mdev會在/etc目錄下找mdev的配置文件: mdev.conf. 若是該文件不存在,那麼在執行mdev –s這個命令時,

會提示找不到mdev.conf,這時咱們能夠建一個空的mdev.conf文件解決這個問題。下面建立使用mdev自動掛載u盤和SD卡的配置/etc/mdev.conf

[weishusheng@localhost etc]$ vim mdev.conf
sd[a-z][0-9] 0:0 0777 @(mount /dev/$MDEV /mnt/usb)
sd[a-z] 0:0 0777 $(umount /mnt/usb)
ub[a-z][0-9] 0:0 0777 @(mount /dev/$MDEV /mnt/usb)
ub[a-z] 0:0 0777 $(umount /mnt/usb)
mmcblk[0-9]p[0-9] 0:0 0777 @(mount /dev/$MDEV /mnt/sdc)
mmcblk[0-9] 0:0 0777 $(umount /mnt/sdc)

16.建立用戶組group文件

它的格式以下:

 

groupname:password:gid:members

 

第一個字段爲用戶組名稱

第二個字段爲用戶組密碼,當爲x時密碼是映射到/etc/gshadow中的,是非逆的

第三個字段爲GID,及組號,爲正整數或0,0被付於了root用戶組;系統一般會預留一些較靠前的GID給系統虛擬用戶之用,每一個系統預留的GID都不一樣,Fedora預留了500個,因此咱們添加新用戶組時是從500開始的。GID的範圍由/etc/login.defs中的GID_MIN和GID_MAX決定

第四個字段爲用戶列表,每一個用戶間用逗號分隔

 

這裏的password表明組口令,不多用到。它可以使原先不在這個羣組中的用戶能夠經過newgrp命令暫時繼承該組的權限,使用 newgrp命令時會新開一個shell。口令的加密方式和passwd文件中的口令同樣,因此若是需設置組口令,要用passwd程序虛設一個用戶,再把該用戶password節中的加密口令拷貝到/etc/group文件中。members列表明組成員,咱們可把需加入該組的用戶以逗號分隔添加到這裏便可。同一組的成員可繼承該組所擁有的權限。

 

 

17.建立用戶passwd文件

它的格式以下:

username:password:uid:gid:gecos:homedir:shell

 

第一個字段爲登陸名

第二個字段爲口令,通常被映射到shadow文件中

第三個字段爲UID

第四個字段爲GID

第五個字段爲用戶名全稱,gecos是通用電子計算機操做系統的縮寫,是Bell實驗室中的一臺大型主機。

第六個字段爲用戶根目錄

第七個字段爲用戶所用SHELL的類型

 

Unix系統最初是用明文保存密碼的,後來因爲安全的考慮,採用crypt()算法加密密碼並存放在/etc/passwd文件。如今,因爲計算機處理能力的提升,使密碼破解變得愈來愈容易。/etc/passwd文件是全部合法用戶均可訪問的,你們均可互相看到密碼的加密字符串,這給系統帶來很大的安全威脅。現代的Unix系統使用影子密碼系統,它把密碼從/etc/pa sswd文件中分離出來,真正的密碼保存在/etc/shadow文件中,shadow文件只能由超級用戶訪問。這樣入侵者就不能得到加密密碼串,用於破解。使用shadow密碼文件後,/etc/passwd文件中全部賬戶的password域的內容爲"x",若是password域的內容爲"*",則該賬號被停用。使用passwd這個程序可修改用戶的密。

18. 建立密碼映射shadow文件

他的格式以下:

username:password:last_change:min_change:max_change:warm:failed_expire:expiration:reserved

第一字段:用戶名(也被稱爲登陸名),在/etc/shadow中,用戶名和/etc/passwd 是相同的,這樣就把passwd 和shadow中用的用戶記錄聯繫在一塊兒;這個字段是非空的;

第二字段:密碼(已被加密),這個字段是非空的;

第三字段:上次修改口令的時間;這個時間是從1970年01月01日算起到最近一次修改口令的時間間隔(天數),您能夠經過passwd 來修改用戶的密碼,而後查看/etc/shadow中此字段的變化;

第四字段:兩次修改口令間隔最少的天數;若是這個字段的值爲空,賬號永久可用;

第五字段:兩次修改口令間隔最多的天數;若是這個字段的值爲空,賬號永久可用;

第六字段:提早多少天警告用戶口令將過時;若是這個字段的值爲空,賬號永久可用;

第七字段:在口令過時以後多少天禁用此用戶;若是這個字段的值爲空,賬號永久可用;

第八字段:用戶過時日期;此字段指定了用戶做廢的天數(從1970年的1月1日開始的天數),若是這個字段的值爲空,賬號永久可用;

第九字段:保留字段,目前爲空,以備未來發展之用; 

這裏咱們設置爲不用密碼登錄,將password格式的內容清空:

[weishusheng@localhost etc]$ vim shadow
root::0:0:99999:7:::

 

二. 在文件系統中安裝busybox

 

BusyBox各版本下載地址

免費下載地址在 http://linux.linuxidc.com/

用戶名與密碼都是www.linuxidc.com

 具體下載目錄在 /pub/BusyBox/

 

1.解壓

[weishusheng@localhost ~]$ tar -xjf busybox-1.20.0.tar.bz2

2.進入 busybox-1.20.0,修改Makefile

 

[weishusheng@localhost ~]$ cd busybox-1.20.0
[weishusheng@localhost busybox-1.20.0]$ vim Makefile

把CROSS_COMPILER爲:

CROSS_COMPILE ?= /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-

(每一個人路徑不同,找到本身真正的交叉編譯器路徑)

3.配置make menuconfig

[weishusheng@localhost busybox-1.20.0]$ export TERM=vt100
[weishusheng@localhost busybox-1.20.0]$ make menuconfig

Busybox Settings  --->

       General Configuration  --->

             [*] Don't use /usr

       Installation Options ("make install" behavior)  --->

             What kind of applet links to install (as soft-links)  --->

             (/home/weishusheng/rootfs) BusyBox installation prefix

#其餘選項結合和本身的需求定製

編譯完成後

[weishusheng@localhost busybox-1.20.0]$ file busybox
busybox: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), stripped

 

4.安裝busybox到你的文件系統下

[weishusheng@localhost busybox-1.20.0]$ sudo make install

安裝完了以後

ls ../rootfs

apps  bin  data  dev  etc  info  lib  linuxrc  mnt  proc  root  sbin  sys  tmp  usr  var

發現多了個linuxrc的文件。

 

三.移植dropbear

1.首先編譯生成PC版的,在製做密鑰時用到

 

[weishusheng@localhost ~]$ wget http://matt.ucc.asn.au/dropbear/releases/dropbear-0.53.1.tar.bz2

 

2.解壓

[weishusheng@localhost ~]$ tar -xjf dropbear-0.53.1.tar.bz2

3.

[weishusheng@localhost dropbear-0.53.1]$ ./configure && make

生成的文件: 

    dropbear: ssh2 server

    dropbearkey: 密鑰生成器

    dropbearconvert: 能夠轉換openssh的密鑰

    dbclient: ssh2 client 

4.

[weishusheng@localhost dropbear-0.53.1]$ ./dropbearkey -t rsa -f /home/weishusheng/rootfs/etc/dropbear/dropbear_rsa_host_key

[weishusheng@localhost dropbear-0.53.1]$ ./dropbearkey -t dss -f /home/weishusheng/rootfs/etc/dropbear/dropbear_dss_host_key

[weishusheng@localhost dropbear-0.53.1]$ chmod 666 /home/weishusheng/rootfs/etc/dropbear/dropbear_*

5.編譯ARM版本的

[weishusheng@localhost dropbear-0.53.1]$ make distclean

[weishusheng@localhost dropbear-0.53.1]$ ./configure CC=/opt/buildroot-2011.11/arm920t/usr/bin/arm-linux-gcc --build=i686 --host=arm-linux --disable-zlib

[weishusheng@localhost dropbear-0.53.1]$ make

 

[weishusheng@localhost dropbear-0.53.1]$ file dropbear
dropbear: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), not stripped

 

[weishusheng@localhost dropbear-0.53.1]$ file dbclient
dbclient: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), not stripped

 

[weishusheng@localhost dropbear-0.53.1]$ mv dbclient ssh

[weishusheng@localhost dropbear-0.53.1]$ arm-linux-strip dropbear

(若是arm-linux-strip命令執行錯誤,給出交叉編譯器路徑[weishusheng@localhost dropbear-0.53.1]$ /opt/buildroot-2011.11/arm920t/usr/bin/arm-linux-strip dropbear)

[weishusheng@localhost dropbear-0.53.1]$ /opt/buildroot-2011.11/arm920t/usr/bin/arm-linux-strip ssh

拷貝到rootfs目錄下

[weishusheng@localhost dropbear-0.53.1]$ cp dropbear ssh /home/weishusheng/rootfs/usr/sbin/

6.在文件系統中建立啓動腳本

[weishusheng@localhost ~]$ cd rootfs/

[weishusheng@localhost rootfs]$ vim etc/init.d/S04_dropbear
#!/bin/sh
/usr/sbin/dropbear

[weishusheng@localhost rootfs]$ chmod 777 etc/init.d/S04_dropbear

 

 

到此時,若是咱們直接編譯下載,會提示

VFS: Cannot open root device "(null)" or unknown-block(0,0)的錯誤信息,緣由是製做initramfs文件系統啓動時會在根文件系統中執行第一個init程序,它對uboot傳過來的參數init=/linuxrc不予理睬,因此須要在上面製做的根文件系統裏的根目錄加入init程序,不然沒法啓動。init程序和linuxrc程序同樣都是符號連接文件,它們都是指向/bin/busybox程序。

#解決辦法:

在製做好的文件系統中加入init程序,其實就是至關於製做initramfs文件系統了!!!

[weishusheng@localhost rootfs]$ ln -s bin/busybox init

 

7.在內核中指定根文件系統的目錄,而後從新編譯下載

[weishusheng@localhost linux-3.0]$ sudo make menuconfig

General setup  --->
       [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
       (/home/weishusheng/rootfs) Initramfs source file(s)    #輸入根文件系統的所在目錄  

[weishusheng@localhost linux-3.0]$ make

因爲咱們把根文件系統完善成了initramfs文件系統,u-boot專遞給內核的參數須要改動,在開發板啓動u-boot後進入調試模式,輸入如下命令

[ s3c2440@wss ]# set bkr 'tftp 30008000 linuxrom-s3c2440.bin;nand erase 100000 800000;nand write 30008000 100000 800000'

[ s3c2440@wss ]# set bootcmd_initramdisk 'nand read 30008000 100000 800000;bootm 30008000'

[ s3c2440@wss ]# set bootargs 'console=ttyS0,115200 mem=64M init=/linuxrc rw loglevel=7'

[ s3c2440@wss]# set bootcmd 'run bootcmd_initramdisk'

[ s3c2440@wss]# save

 而後把內核下載到開發板上,ok 了。

相關文章
相關標籤/搜索