Chinaunix首页 | 论坛 | 博客
  • 博客访问: 208270
  • 博文数量: 33
  • 博客积分: 1241
  • 博客等级: 中尉
  • 技术积分: 330
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-20 16:34
个人简介

..

文章分类

全部博文(33)

文章存档

2012年(1)

2011年(8)

2010年(8)

2009年(4)

2007年(12)

我的朋友

分类: LINUX

2010-03-26 11:32:29

 
use kernel: 2.6.10.
filesystem: devfs
 
---------------------------------
ramdisk modify files:
:
group  passwd shadow shells inittab inetd.conf init.d/rcS hosts

ll -t
total 17
-rw-r--r-- 1 1543 1543  401 Mar 18 15:50 inetd.conf
-rwxr-xr-x 1 root root  196 Mar 18 15:31 inittab
-rw-r--r-- 1 root root  118 Mar 18 15:23 passwd
-rw-r----- 1 root root  182 Mar 18 15:09 shadow
-rw-r--r-- 1 root root   51 Mar 18 14:26 group
-rw-r--r-- 1 1543 1543   34 Mar 18 14:05 hosts
drwxr-xr-x 2 root root 1024 Mar 18 14:02 init.d
-rw-r--r-- 1 1543 1543    8 Mar 18 13:53 shells
 
cat group
root:x:0:
shadow:x:42:
nogroup:x:65534:
ssh:x:105:
 
cat passwd
root:x:0:0:root:/root:/bin/sh
sshd:x:103:65534::/var/run/sshd:/usr/sbin/nologin
ftp:x:104:65534::/home/ftp:/bin/false
 
sudo cat shadow
root::14686:0:99999:7:::
daemon:*:14421:0:99999:7:::
bin:*:14421:0:99999:7:::
sys:*:14421:0:99999:7:::
nobody:*:14421:0:99999:7:::
sshd:*:14421:0:99999:7:::
ftp:*:14421:0:99999:7:::
 
note: root don't have password, because NULL in password area.
* in password area, stand for this user is forbiden
if want to create a passwd for root, use busybox passwd cmd
to do it.
 
cat shells
/bin/sh
 
cat inittab
::sysinit:/etc/init.d/rcS
#::respawn:/bin/sh
::respawn:/sbin/getty -L console 115200 vt100
#::ctrlaltdel:/sbin/reboot
::shutdown:/sbin/swapoff -a
::shutdown:/bin/umount -a -r
::restart:/sbin/init
 
cat inetd.conf
echo    stream  tcp     nowait  root    internal
echo    dgram   udp     wait    root    internal
discard stream  tcp     nowait  root    internal
discard dgram   udp     wait    root    internal
daytime stream  tcp     nowait  root    internal
daytime dgram   udp     wait    root    internal
chargen stream  tcp     nowait  root    internal
chargen dgram   udp     wait    root    internal
ftp     stream  tcp     nowait  root    /sbin/ftpd      ftpd
telnet  stream  tcp     nowait  root    /sbin/telnetd   telnetd
 
cat init.d/rcS
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
HOSTNAME="VDSL"
mount -o remount,rw /
mount -t proc /proc /proc
mount -t devpts devpts /dev/pts -ogid=5,mode=620
echo -n "Configure Ethernet connection... "
ifconfig lo 127.0.0.1 netmask 255.0.0.0
#ifconfig eth0 192.168.150.183 netmask 255.255.255.0
#ifconfig eth0 netmask 255.255.0.0
echo "Done."
hostname $HOSTNAME
mount -o remount,rw /
echo -n "Start INET daemon... "
/sbin/inetd
 
---------------------------------
: version 1.14.3
CONFIG_INETD=y
CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO=y
CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD=y
CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME=y
CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME=y
CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN=y
# CONFIG_FEATURE_INETD_RPC is not set
 
CONFIG_TELNETD=y
# CONFIG_FEATURE_TELNETD_STANDALONE is not set
 
---------------------------------
kernel:
#
# Non-8250 serial port support
#
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_UNIX98_PTYS=y
CONFIG_LEGACY_PTYS=y
CONFIG_LEGACY_PTY_COUNT=256
#
# Pseudo filesystems
#
...
CONFIG_DEVFS_FS=y
CONFIG_DEVFS_MOUNT=y
# CONFIG_DEVFS_DEBUG is not set
CONFIG_DEVPTS_FS_XATTR=y
CONFIG_DEVPTS_FS_SECURITY=y
 
-----------------------------
telnetd need important libs
depend on library.
NSS (Name Service Switch)
libnss_compat  for read /etc/shadow
libnss_files   for read /etc/passwd
 
===============================
log:
RAMDISK: Compressed image found at block 0
VFS: Mounted root (ext2 filesystem).
Mounted devfs on /dev
Freeing prom memory: 1020kb freed
Freeing unused kernel memory: 136k freed
Algorithmics/MIPS FPU Emulator v1.5
mount: cannot read /proc/mounts: No such file or directory
Configure Ethernet connection... Done.
Create WinPATH memory mapping devices...
    /dev/wp_siu1: created
    /dev/wp_siu2: created
    /dev/wp_siu3: created
    /dev/wp_siu4: created
Done.
Start INET daemon...
VDSL login: root
login[40]: root login on 'console'
# ps
  PID USER       VSZ STAT COMMAND
    1 root      3924 S    init      
    2 root         0 SW<  [ksoftirqd/0]
    3 root         0 SW<  [desched/0]
    4 root         0 SW<  [events/0]
    5 root         0 SW<  [khelper]
    6 root         0 SW<  [kthread]
    7 root         0 SW<  [kblockd/0]
    8 root         0 SW   [pdflush]
    9 root         0 SW   [pdflush]
   11 root         0 SW<  [aio/0]
   10 root         0 SW   [kswapd0]
   12 root         0 SW   [mtdblockd]
   39 root      4240 S    /sbin/inetd
   40 root      3928 S    -sh
   41 root      3920 R    ps
# telnet 127.0.0.1
Entering character mode
Escape character is '^]'.

VDSL login: root
login[44]: root login on 'pts/0'
#
#
# ps
  PID USER       VSZ STAT COMMAND
    1 root      3924 S    init      
    2 root         0 SW<  [ksoftirqd/0]
    3 root         0 SW<  [desched/0]
    4 root         0 SW<  [events/0]
    5 root         0 SW<  [khelper]
    6 root         0 SW<  [kthread]
    7 root         0 SW<  [kblockd/0]
    8 root         0 SW   [pdflush]
    9 root         0 SW   [pdflush]
   11 root         0 SW<  [aio/0]
   10 root         0 SW   [kswapd0]
   12 root         0 SW   [mtdblockd]
   39 root      4240 S    /sbin/inetd
   40 root      3928 S    -sh
   42 root      4240 R    telnet 127.0.0.1
   43 root      3920 R    telnetd
   44 root      3928 S    -sh
   45 root      3920 R    ps
# pwd
/root
# ls
# exit
Connection closed by foreign host
# ls
# ls
# cd /
# ls
bin           ftp           mnt           tmp
bin_sbin.txt  home          proc          usr
dev           lib           root          var
etc           lost+found    sbin          winmon
# ls bin
addgroup        env             lsz             strings
adduser         expand          md5sum          stty
ar              expr            mesg            su
arping          fgrep           mkdir           sum
ash             find            mkfifo          sync
awk             flash_erase     mknod           sz
basename        flash_eraseall  mkpasswd        tac
bunzip2         fpga.bin        more            tail
busybox         fpga_install    mount           telnet
bzcat           free            msh             tftp
bzip2           getopt          mv              tftpd
cat             grep            netstat         time
chmod           gunzip          nice            top
chown           gzip            nohup           touch
chroot          hd              od              tty
cksum           head            passwd          ture
clear           hexdump         ping            umount
cmp             hostid          printenv        uname
comm            hostname        ps              uncompress
cp              hush            pwd             unexpand
cpio            id              readlink        uniq
cryptpw         install         realpath        unzip
cut             ipcrm           renice          usleep
date            ipcs            rm              uudecode
dd              kill            rmdir           uuencode
delgroup        killall         rz              vi
deluser         killall5        script          wc
df              length          sed             who
dirname         ln              seq             whoami
dmesg           logger          sh              xargs
du              login           sleep           zcat
echo            logname         sort
ed              lrz             split
egrep           ls              stat
# ls sbin/
arp       getty     init      losetup   reboot    syslogd
chpasswd  halt      insmod    lsmod     rmmod     tar
chroot    ifconfig  klogd     modprobe  route     telnetd
depmod    inetd     logread   poweroff  sysctl
# ls dev/
console   loop      nbd       ptmx      rd        tty       wp_siu3
full      mem       net       pts       root      urandom   wp_siu4
kmem      mtd       null      pty       shm       wp_siu1   zero
kmsg      mtdblock  port      random    tts       wp_siu2
# ls -l dev/
crw-------    1 root     root       5,   1 Jan  1 00:00 console
crw-rw-rw-    1 root     root       1,   7 Jan  1  1970 full
crw-r-----    1 root     root       1,   2 Jan  1  1970 kmem
crw-r--r--    1 root     root       1,  11 Jan  1  1970 kmsg
drwxr-xr-x    1 root     root            0 Jan  1  1970 loop
crw-r-----    1 root     root       1,   1 Jan  1  1970 mem
drwxr-xr-x    1 root     root            0 Jan  1  1970 mtd
drwxr-xr-x    1 root     root            0 Jan  1  1970 mtdblock
drwxr-xr-x    1 root     root            0 Jan  1  1970 nbd
drwxr-xr-x    1 root     root            0 Jan  1  1970 net
crw-rw-rw-    1 root     root       1,   3 Jan  1  1970 null
crw-r-----    1 root     root       1,   4 Jan  1  1970 port
crw-rw-rw-    1 root     root       5,   2 Jan  1 00:00 ptmx
drwxr-xr-x    2 root     root            0 Jan  1 00:00 pts
drwxr-xr-x    1 root     root            0 Jan  1  1970 pty
crw-r--r--    1 root     root       1,   8 Jan  1  1970 random
drwxr-xr-x    1 root     root            0 Jan  1  1970 rd
lr-xr-xr-x    1 root     root            4 Jan  1 00:00 root -> rd/0
drwxr-xr-x    1 root     root            0 Jan  1  1970 shm
drwxr-xr-x    1 root     root            0 Jan  1  1970 tts
crw-rw-rw-    1 root     root       5,   0 Jan  1  1970 tty
crw-r--r--    1 root     root       1,   9 Jan  1  1970 urandom
crw-r--r--    1 root     root     253,   0 Jan  1 00:00 wp_siu1
crw-r--r--    1 root     root     253,   1 Jan  1 00:00 wp_siu2
crw-r--r--    1 root     root     253,   2 Jan  1 00:00 wp_siu3
crw-r--r--    1 root     root     253,   3 Jan  1 00:00 wp_siu4
crw-rw-rw-    1 root     root       1,   5 Jan  1  1970 zero
# ls -l dev/pts/
# ls -l dev/tty
crw-rw-rw-    1 root     root       5,   0 Jan  1  1970 dev/tty
# ls -l dev/pty/
crw-------    1 root     root       2,   0 Jan  1  1970 m0
crw-------    1 root     root       2,   1 Jan  1  1970 m1
crw-------    1 root     root       2,  10 Jan  1  1970 m10
crw-------    1 root     root       2, 100 Jan  1  1970 m100
crw-------    1 root     root       2, 101 Jan  1  1970 m101
crw-------    1 root     root       2, 102 Jan  1  1970 m102
crw-------    1 root     root       2, 103 Jan  1  1970 m103
crw-------    1 root     root       2, 104 Jan  1  1970 m104
crw-------    1 root     root       2, 105 Jan  1  1970 m105
crw-------    1 root     root       2, 106 Jan  1  1970 m106
crw-------    1 root     root       2, 107 Jan  1  1970 m107
crw-------    1 root     root       2, 108 Jan  1  1970 m108
crw-------    1 root     root       2, 109 Jan  1  1970 m109
crw-------    1 root     root       2,  11 Jan  1  1970 m11
crw-------    1 root     root       2, 110 Jan  1  1970 m110
crw-------    1 root     root       2, 111 Jan  1  1970 m111
crw-------    1 root     root       2, 112 Jan  1  1970 m112
crw-------    1 root     root       2, 113 Jan  1  1970 m113
crw-------    1 root     root       2, 114 Jan  1  1970 m114
crw-------    1 root     root       2, 115 Jan  1  1970 m115
crw-------    1 root     root       2, 116 Jan  1  1970 m116
crw-------    1 root     root       2, 117 Jan  1  1970 m117
crw-------    1 root     root       2, 118 Jan  1  1970 m118
 
# ls /dev/pty/
m0    m134  m170  m206  m242  m49   m85   s12   s156  s192  s228  s34   s70
m1    m135  m171  m207  m243  m5    m86   s120  s157  s193  s229  s35   s71
m10   m136  m172  m208  m244  m50   m87   s121  s158  s194  s23   s36   s72
m100  m137  m173  m209  m245  m51   m88   s122  s159  s195  s230  s37   s73
m101  m138  m174  m21   m246  m52   m89   s123  s16   s196  s231  s38   s74
m102  m139  m175  m210  m247  m53   m9    s124  s160  s197  s232  s39   s75
m103  m14   m176  m211  m248  m54   m90   s125  s161  s198  s233  s4    s76
m104  m140  m177  m212  m249  m55   m91   s126  s162  s199  s234  s40   s77
m105  m141  m178  m213  m25   m56   m92   s127  s163  s2    s235  s41   s78
m106  m142  m179  m214  m250  m57   m93   s128  s164  s20   s236  s42   s79
m107  m143  m18   m215  m251  m58   m94   s129  s165  s200  s237  s43   s8
m108  m144  m180  m216  m252  m59   m95   s13   s166  s201  s238  s44   s80
m109  m145  m181  m217  m253  m6    m96   s130  s167  s202  s239  s45   s81
m11   m146  m182  m218  m254  m60   m97   s131  s168  s203  s24   s46   s82
m110  m147  m183  m219  m255  m61   m98   s132  s169  s204  s240  s47   s83
m111  m148  m184  m22   m26   m62   m99   s133  s17   s205  s241  s48   s84
m112  m149  m185  m220  m27   m63   s0    s134  s170  s206  s242  s49   s85
m113  m15   m186  m221  m28   m64   s1    s135  s171  s207  s243  s5    s86
m114  m150  m187  m222  m29   m65   s10   s136  s172  s208  s244  s50   s87
m115  m151  m188  m223  m3    m66   s100  s137  s173  s209  s245  s51   s88
m116  m152  m189  m224  m30   m67   s101  s138  s174  s21   s246  s52   s89
m117  m153  m19   m225  m31   m68   s102  s139  s175  s210  s247  s53   s9
m118  m154  m190  m226  m32   m69   s103  s14   s176  s211  s248  s54   s90
m119  m155  m191  m227  m33   m7    s104  s140  s177  s212  s249  s55   s91
m12   m156  m192  m228  m34   m70   s105  s141  s178  s213  s25   s56   s92
m120  m157  m193  m229  m35   m71   s106  s142  s179  s214  s250  s57   s93
m121  m158  m194  m23   m36   m72   s107  s143  s18   s215  s251  s58   s94
m122  m159  m195  m230  m37   m73   s108  s144  s180  s216  s252  s59   s95
m123  m16   m196  m231  m38   m74   s109  s145  s181  s217  s253  s6    s96
m124  m160  m197  m232  m39   m75   s11   s146  s182  s218  s254  s60   s97
m125  m161  m198  m233  m4    m76   s110  s147  s183  s219  s255  s61   s98
m126  m162  m199  m234  m40   m77   s111  s148  s184  s22   s26   s62   s99
m127  m163  m2    m235  m41   m78   s112  s149  s185  s220  s27   s63
m128  m164  m20   m236  m42   m79   s113  s15   s186  s221  s28   s64
m129  m165  m200  m237  m43   m8    s114  s150  s187  s222  s29   s65
m13   m166  m201  m238  m44   m80   s115  s151  s188  s223  s3    s66
m130  m167  m202  m239  m45   m81   s116  s152  s189  s224  s30   s67
m131  m168  m203  m24   m46   m82   s117  s153  s19   s225  s31   s68
m132  m169  m204  m240  m47   m83   s118  s154  s190  s226  s32   s69
m133  m17   m205  m241  m48   m84   s119  s155  s191  s227  s33   s7
#
#

# ls
bin           ftp           mnt           tmp
bin_sbin.txt  home          proc          usr
dev           lib           root          var
etc           lost+found    sbin          winmon
# ls lib/
ld-2.3.1.so             libnsl-2.3.1.so         libpthread.so.0
ld.so.1                 libnsl.so.1             libresolv-2.3.1.so
libc-2.3.1.so           libnss_compat-2.3.1.so  libresolv.so.2
libc.so.6               libnss_compat.so.2      librt-2.3.1.so
libcrypt-2.3.1.so       libnss_files-2.3.1.so   librt.so.1
libcrypt.so.1           libnss_files.so.2       libutil-2.3.1.so
libdl-2.3.1.so          libpam.so.0             libutil.so.1
libdl.so.2              libpam.so.0.75          modules
libdump.so              libpam_misc.so.0        security
libm-2.3.1.so           libpam_misc.so.0.75
libm.so.6               libpthread-0.10.so
# ls lib/security/
pam_console.so    pam_env.so        pam_listfile.so   pam_shells.so
pam_cracklib.so   pam_ftp.so        pam_nologin.so    pam_stack.so
pam_deny.so       pam_group.so      pam_securetty.so  pam_unix.so
#
#
# cat /proc/filesystems
nodev sysfs
nodev rootfs
nodev bdev
nodev proc
nodev sockfs
nodev pipefs
nodev futexfs
nodev tmpfs
nodev eventpollfs
nodev devpts
      ext2
      squashfs
nodev ramfs
nodev devfs
nodev jffs2
#
#
# ls /etc/
ftpaccess      hostname       inittab        profile        shells
ftpusers       hosts          nsswitch.conf  protocols      syslog.conf
group          inetd.conf     pam.d          services       xinetd.conf
host.conf      init.d         passwd         shadow         xinetd.d
#
 
===============================
below copy form other articles:
busybox telnetd配置
busybox的telnetd配置小有点麻烦,现分享一下:
1:目标系统的内核必须启动选项UNIX98_PTYS=y(可以cat /proc/filesystems看一下是否存在devpts)
2:mknod
3:mkdir /dev/pts mount -t devpts devpts /dev/pts
4:busybox必须编译login等进去
5:passwd设置root用户的密码
6:done!
 
===============================
below copy form other articles:
 

利用busybox制作文件系统

03月 14th, 2009 by tmsonhust

 By 2009.3.13

1         获取源码解压
从busybox的官方主页 ,下载busybox的源码,目前最新的版本为busybox-1.13.3.tar.bz2
#tar –jvxf busybox-1.13.3.tar.bz2
进入解压后的busybox源码目录
#cd busybox-1.13.3
2         配置busybox
步骤跟编译linux内核时很像
#make menuconfig
出现一个图形界面,选择Busybox Settings,这里可以对编译、安装以及调试等模式进行配置。
然后选择Build Options,对交叉编译器以及编译方式进行配置。
其中的第一项是Build Busybox as a static binary(no shared libs),如果选择上,则busybox将以静态形式进行编译,否则将以动态方式编译。此外,还需要对交叉编译环境进行配置,选择其中的Cross Compiler Perfix,输入交叉编译器的前缀,我们的嵌入式平台上使用的是arm-uclinux-linux的交叉编译工具。
这里我们先选择静态编译,动态方式的稍后再讲,注意Build with Large File Support (for accessing files > 2 GB)不要选(默认是选上的),否则编译后会出现如下错误:
miscutils/lib.a(readahead.):In function ‘readahead_main’
readahead.(.text.readahead_main+0×70):undefined reference to ‘readahead’
collect2:ld returned 1 exit status
make :***[busybox_unstripped ]Error 1
 
3         编译busybox
#make
4         安装busybox
#make install
可以采用perfix参数安装到指定目录下,格式为:make install prefix=xxx目录,如果不特别指定,将默认在busybox源码目录下生成一个_install目录。到此,busybox基本上可以功成身退了。我们需要的就是busybox编译出来的这个_install目录。
进入_install目录,可以看到一共有3个目录和一个文件,分别是:bin、sbin和usr目录以及linuxrc文件。
在对这几个目录进行说明之前,先简单介绍一下编译生成的busybox可执行文件,它存在于bin目录下。Busybox使用了带参的main 函数:int main(int argc,char *argv[]),在这个定义中,argc是传递进来的参数的个数(参数数量),而argv是一个字符串数组,代表从命令行传递进来的参数。argv的索引0是命令行调用的程序名。可以在bin目录下进行如下操作:
#busybox pwd(注意,busybox这个可执行文件不需要加./)
当为一个可执行程序创建符号链接后,在执行这个符号链接时,就可以获取到这个符号链接的名字。而busybox正是使用符号链接的方式使一个可执行程序看起来像很多程序一样。对于busybox中包含的每个工具来讲,都会创建一个符号链接,这样就可以使用这些符号链接来调用busybox了。然后busybox接着根据argv[0]的值来调用内部工具。
下面分别对install目录下的几个文件进行一些说明。
Ø        bin包含用户工具,其中,busybox可执行文件就在这个目录下,该目录下其他所有文件都是指向busybox的符号链接
Ø        sbin目录包含操作系统工具,同样也指向busybox。
Ø        linuxrc是一个链接文件,指向busybox。
5         添加etc目录及基本配置文件
参考一个正常的linux系统将会发现,此时busybox建立的文件系统还缺少很多文件。如果用这个作为文件系统,将是无法运行的。生成这些配置可以选择的方法有2种,一种是直接从一个正常运行的系统中拷贝,另一种是借助于busybox的examples。显然,选择第二种会容易的多,我们直接拷贝examples/bootfloopy/etc到install目录下。
#cp –a ../examples/bootfloppy/etc/ .
然后可以看看etc目录下的文件,一共有3个目录和文件,下面逐一对以上几个文件进行分析和说明。
Ø        inittab文件:系统启动后访问的第一个脚本文件,后续启动的文件都由它指定。下面看一下busybox中原始的inittab文件内容:
::sysint:/etc/init.d/rcS
::respawn:-/bin/sh
tty2::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount –a -r
其中第一行指定系统的启动脚本为/etc/init.d/rcS
第二行指定打开一个登录会话
第三行指定在第三个虚拟终端打开一个无须登录验证的shell
第四行指定了当按下ctrl+alt+del组合键时的执行命令
Ø        fstab文件:定义了文件系统的各个“挂载点”,需要与实际的系统相配合。默认的fstab文件内容为:
proc   /proc proc defaults 0 0
其他的根据需要再进行添加,比如devpts  /dev/pts devpts defaults 0 0就是为UNIX PTYs准备的,后面讲telnetd时要用到。
Ø        profile文件:终端登陆之后首先运行的脚本。
 
6         添加dev目录及基本设备文件
调试时要通过串口发送消息到终端显示。因此串口控制台和终端2个设备文件是必不可少的。
#mkdir dev
#mknod dev/console c 5 1
#mknod dev/ttyAMA0 c 204 64
在启动参数中,设置console=ttyAMA0
7         添加其他常用目录
可以选择home、root、proc、mnt、lib、var、opt、tmp。
此时,一个基本的文件系统的功能就已经完成了。可以采用NFS进行调试。但是,此时你可能会遇到如下问题,系统登录后终端上会不断打印:
cannot open /dev/ttyS2:No such file or directory.
原因出在/etc目录下的inittab文件,我们看一下其内容:
::sysint:/etc/init.d/rcS
::respawn:-/bin/sh
tty2::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount –a -r
这条语句表示在第3个虚拟终端打开一个无须登录验证的shell。而我们之前没有建立这个tty2设备,因此会出错。解决的办法有2个:一是屏蔽该语句,二是建立该设备节点。我们选择将其屏蔽。
8         相关问题
8.1      使用动态方式编译 busybox
进入Build Options时,不要选择Build Busybox as a static binary,其他所有操作步骤跟静态编译一样,你会发现这样建立的文件系统无法启动,终端上打印出如下消息:
Kernel panic-not synving:No init found. Try passing init=option to kernel.
为什么会出现这种问题呢?这就得回到两种编译方式的特点上来。静态编译时是将所用到的库文件一起编译了进去,而动态编译时是在需要时才调用相应的库。我们选择动态编译后,没有添加任何库文件就运行,显然是会出错的。那么如何查看busybox可执行文件里使用的库呢。Readelf这个工具提供了解决办法。使用如下命令,参数d表示将文件中所有的动态部分予以显示。
# arm-uclibc-linux-readelf -d busybox 
Dynamic section at offset 0xca014 contains 18 entries:
 标记        类型                         名称/值
 0×00000001 (NEEDED)                     共享库: [libm.so.0]
 0×00000001 (NEEDED)                     共享库: [libc.so.0]
 0×0000000c (INIT)                       0xbe24
 0×0000000d (FINI)                       0xb2054
 0×00000004 (HASH)                       0×80e8
 0×00000005 (STRTAB)                     0xa500
 0×00000006 (SYMTAB)                     0×8b70
 0×0000000a (STRSZ)                      3259 (bytes)
 0×0000000b (SYMENT)                     16 (bytes)
 0×00000015 (DEBUG)                      0×0
 0×00000003 (PLTGOT)                     0xda0cc
 0×00000002 (PLTRELSZ)                   3040 (bytes)
 0×00000014 (PLTREL)                     REL
 0×00000017 (JMPREL)                     0xb244
 0×00000011 (REL)                        0xb1bc
 0×00000012 (RELSZ)                      136 (bytes)
 0×00000013 (RELENT)                     8 (bytes)
 0×00000000 (NULL)                       0×0
从上面的结果中,我们可以看到,busybox这个程序使用到了libm.so.0和libc.so.0两个库文件,实际上这是2个符号链接,分别指向libc-0.9.28.so和libuClibc-0.9.28.so。将以上四个文件分别拷贝到lib目录下。按理说,这样应该就可以了,但是仍然无法正常运行。显示的错误信息和刚刚没加库之前一样。可能的原因有2种:一是库文件没有添加全,二是库文件没有正确被加载。根据readelf显示的结果应该不是第一种原因。那么到底为什么没被正确加载呢?原来库文件的加载,还需要一个共享库加载器。找到对应的文件ld-uClibc- 0.9.28.so和ld-uClibc.so.0添加到lib目录下后。运行正常。
8.2      终端登录用户验证功能添加
需要在etc目录下增加passwd、group和shadow(在编译busybox时如果不选择shadow功能将不需要这个文件)3个文件。
生成这3个文件的方法有:
Ø        手动生成,按照格式规范自己编写内容;
Ø        通过busybox提供的工具adderuser自动生成
8.2.1        手动方式
首先我们介绍一下如何手动添加。以增加root用户为例,增加passwd文件,其内容为:
#cat passwd
root:x:0:0:root:/root:/bin/sh
同时,此时要确定root目录已经存在。
passwd一共由7个字段组成,6个冒号将其隔开。它们的含义分别为:
1     用户名
2     是否有加密口令,x表示有,不填表示无,采用MD5、DES加密。
3     用户ID
4     组ID
5     注释字段
6     登录目录
7     所使用的shell程序
增加group文件,其内容为:
#cat group
root:x:0:
Group一共由4个字段组成,3个冒号将其隔开,它们的含义分别为:
1     组名
2     是否有加密口令,同passwd
3     组ID
4     指向各用户名指针的数组
由于busybox默认启动了shadow模式,因此需要增加shadow文件,其内容为:
#cat shadow
root:$1$3jZ93Mwq$oaeef6lWIuThavs8wD0Wh1:0:0:99999:7:::
shadow一共由9个字段组成,8个冒号将其隔开,它们的含义分别为:
1     用户名
2     加密后的口令,若为空,表示该用户不需要口令即可登陆,若为*号,表示该账号被禁用。 上面的表示的是123456加密后的口令。
3     从1970年1月1日至口令最近一次被修改的天数
4     口令在多少天内不能被用户修改
5     口令在多少天后必须被修改(0为没有修改过)
6     口令过期多少天后用户账号被禁止
7     口令在到期多少天内给用户发出警告
8     口令自1970年1月1日被禁止的天数
9     保留域
这里强调一下shadow文件的由来。/etc/passwd文件对系统的所有用户都是可读的,这样的好处是每个用户都知道系统上有哪些用户,但缺点是其他用户的口令容易受到攻击,尤其是当口令较简单时。所以一些linux系统中使用到了影子口令文件shadow,将用户的口令存储在另一个文件 /etc/shadow中,该文件只有根用户root可读,大大提高了安全性。
不过,采用这种手动添加文件的方法有一个缺陷,就是如果要为用户设置登陆口令的话,shadow文件中必须填写加密后的口令,而这个加密算法我们又不知道,即使知道,要经过转换后再添加,比较麻烦。此时,不妨试一下第二种方法。
8.2.2        自动方式
自动生成是使用了busybox提供的adduser工具和passwd工具。
在文件系统正常运行起来后,使用adduser命令,使用方法为:
#adduser root
然后就会在etc目录下自动生成passwd 、group和shadow3个文件。但是运行该命令后会打印出如下消息:
passwd:unknown uid 0
这表示不能为该用户设置密码,此时你会发现要passwd命令也无法使用。
解决的办法是,打开passwd文件,其内容为:
root:x:1000:1000:Linux User…:/home/root:/bin/sh
将用户ID和组ID均更改为0
打开group文件,其内容为:
root:x:1000:
同样将组ID改为0
然后,passwd命令就可以正常使用了。这时为root用户设置口令:
#passwd root
根据提示输入密码。其中,root用户登陆后的目录可以手动进行更改。
8.3      telnetd功能添加
busybox默认已经添加了对telnetd和telnet功能的支持,只需要完成一些相关的设置工作就可以启动这2个功能了。
Ø          创建/dev/pts目录
Ø        在/etc/fstab中添加如下信息,挂载devpts文件系统
devpts /dev/pts devpts defaults 0 0
Ø        在/dev目录下增加ptmx设备文件:
#mknod ptmx c 5 2
Ø        在rcS文件中添加如下脚本,启动telnetd
if [ -x /usr/sbin/telnetd ] ;
then
        telnetd&
fi
Ø        在/dev目录下增加null设备文件,否则上述脚本运行时会出错:提示找不到null文件。
#mknod null c 1 3
此时,telnetd功能开机就可以启动了。
 
阅读(4218) | 评论(0) | 转发(0) |
0

上一篇:FAT over NAND Flash

下一篇:console & tty differ

给主人留下些什么吧!~~