Chinaunix首页 | 论坛 | 博客
  • 博客访问: 149248
  • 博文数量: 25
  • 博客积分: 1632
  • 博客等级: 上尉
  • 技术积分: 324
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-02 21:19
文章分类

全部博文(25)

文章存档

2011年(13)

2010年(12)

我的朋友

分类: LINUX

2010-04-11 18:07:16

建立根文件系统

首先需要下面2个源文件

busybox-1.11.2.tar.bz2

arm-2008q1-126-arm-none-linux-gnueabi-i686-pc-linuxgnu.tar.bz2

解压busybox工具:

# ls

busybox-1.11.2.tar.bz2

# tar -xjvf busybox-1.11.2.tar.bz2

# ls
busybox-1.11.2  busybox-1.11.2.tar.bz2

解压交叉编译工具:

# ls

arm-2008q1-126-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

# tar -xjvf arm-2008q1-126-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
# ls
arm-2008q1 

arm-2008q1-126-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

完成以上的步骤后就可以进行根文件系统的制作了.

第一:设置交叉编译工具的路径:

查看交叉编译工具的具体路径.

root@emboard:/workdir/at91sam9261/crosstool/arm-2008q1/bin# ls

arm-none-linux-gnueabi-addr2line  arm-none-linux-gnueabi-g++        arm-none-linux-gnueabi-gprof    arm-none-linux-gnueabi-readelf

arm-none-linux-gnueabi-ar         arm-none-linux-gnueabi-gcc        arm-none-linux-gnueabi-ld       arm-none-linux-gnueabi-size

arm-none-linux-gnueabi-as         arm-none-linux-gnueabi-gcc-4.2.3  arm-none-linux-gnueabi-nm       arm-none-linux-gnueabi-sprite

arm-none-linux-gnueabi-c++        arm-none-linux-gnueabi-gcov       arm-none-linux-gnueabi-objcopy  arm-none-linux-gnueabi-strings

arm-none-linux-gnueabi-c++filt    arm-none-linux-gnueabi-gdb        arm-none-linux-gnueabi-objdump  arm-none-linux-gnueabi-strip

arm-none-linux-gnueabi-cpp        arm-none-linux-gnueabi-gdbtui     arm-none-linux-gnueabi-ranlib

root@emboard:/workdir/at91sam9261/crosstool/arm-2008q1/bin# pwd

/workdir/at91sam9261/crosstool/arm-2008q1/bin

直接在终端配置交叉编译工具的环境.

root@emboard:/workdir/at91sam9261/crosstool/arm-2008q1/bin#

export PATH=$PATH:/workdir/at91sam9261/crosstool/arm-2008q1/bin/

root@emboard:/workdir/at91sam9261/crosstool/arm-2008q1/bin# arm-none-linux-gnueabi-gcc -v

Using built-in specs.

Target: arm-none-linux-gnueabi

Configured with: /scratch/sandra/lite/src/gcc-4.2/configure --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=arm-none-linux-gnueabi --enable-threads --disable-libmudflap --disable-libssp --disable-libgomp --disable-libstdcxx-pch --with-gnu-as --with-gnu-ld --enable-languages=c,c++ --enable-shared --enable-symvers=gnu --enable-__cxa_atexit --with-pkgversion=Sourcery G++ Lite 2008q1-126 --with-bugurl= --disable-nls --prefix=/opt/codesourcery --with-sysroot=/opt/codesourcery/arm-none-linux-gnueabi/libc --with-build-sysroot=/scratch/sandra/lite/linux/install/arm-none-linux-gnueabi/libc --enable-poison-system-directories --with-build-time-tools=/scratch/sandra/lite/linux/install/arm-none-linux-gnueabi/bin --with-build-time-tools=/scratch/sandra/lite/linux/install/arm-none-linux-gnueabi/bin

Thread model: posix

gcc version 4.2.3 (Sourcery G++ Lite 2008q1-126)

以上可以知道交叉编译工具的环境变量配置成功.

进入busybox目录进行编译配置:

root@emboard:/workdir/at91sam9261/filesyetem/busybox-1.11.2# make menuconfig

首先进入主界面:

 

选中上面的那个选项进入,

选中上面的那个选项进入

按照上面的配置,然后退到上个目录如下所示,进入那个目录

 

所示配置如下:

然后退回上个目录:

进入目录做如下配置:

上图中的下面的2个选项中:

2个项要选上,不然文件系统是不是别PS1这个环境变量的参数的。

退回住目录如下:

然后进入下面的目录进行配置:

选择进入上图中选中的目录,进入后界面如下:

选中后退到上个目录,进入如下

 

选中上面的选项,然后退到主界面:

进入上面选中目录,界面如下:

这样基本配置完成:

root@emboard:/workdir/at91sam9261/filesyetem/busybox-1.11.2# make

root@emboard:/workdir/at91sam9261/filesyetem/busybox-1.11.2# make install

# ls _install/
bin  linuxrc  sbin  usr

这样就生成我们所需要的文件了.

为了方便,我把步骤都写成一个脚本了,如果对脚本不熟悉的话,可以按照脚本里面的步骤一步一步来.

进入你所要建立文件目录树的目录,下面是我的目录:

# ls
busybox-1.11.2  busybox-1.11.2.tar.bz2

# vim mk_roofs

#!/bin/bash

mkdir rootfs
cd rootfs
mkdir boot etc home proc tmp var dev mnt root sys
cd etc
mkdir init.d
cd ..
cd dev
mknod console c 5 1
mknod null c 1 3
cd ../..
ls

上面的基本的文件夹,还需要对etc下面进行修改!

# . mk_rootfs

运行这个脚本

# ls
busybox-1.11.2  busybox-1.11.2.tar.bz2  mk_roofs  rootfs

建立lib文件,然后将交叉编译工具的lib文件复制过来

# mkdir lib
# cp -a ../../crosstool/arm-2008q1/arm-none-linux-gnueabi/libc/armv4t/lib/* lib/

# cd lib/
# ls
ld-2.5.so               libcrypt-2.5.so  libm.so.6             libnss_hesiod-2.5.so   libresolv-2.5.so
ld-linux.so.3           libcrypt.so.1    libnsl-2.5.so         libnss_hesiod.so.2     libresolv.so.2
libanl-2.5.so           libc.so.6        libnsl.so.1           libnss_nis-2.5.so      librt-2.5.so
libanl.so.1             libdl-2.5.so     libnss_compat-2.5.so  libnss_nisplus-2.5.so  librt.so.1
libBrokenLocale-2.5.so  libdl.so.2       libnss_compat.so.2    libnss_nisplus.so.2    libSegFault.so
libBrokenLocale.so.1    libgcc_s.so      libnss_dns-2.5.so     libnss_nis.so.2        libthread_db-1.0.so
libc-2.5.so             libgcc_s.so.1    libnss_dns.so.2       libpcprofile.so        libthread_db.so.1
libcidn-2.5.so          libm-2.5.so      libnss_files-2.5.so   libpthread-2.5.so      libutil-2.5.so
libcidn.so.1            libmemusage.so   libnss_files.so.2     libpthread.so.0        libutil.so.1
然后将busybox制作的文件复制过来.

# cd ..
# ls
boot  dev  etc  home  lib  mnt  proc  root  sys  sysconfig  tmp  var
# cp -a ../busybox-1.11.2/_install/* .
# ls
bin  boot  dev  etc  home  lib  linuxrc  mnt  proc  root  sbin  sys tmp  usr  var

# cd usr/
# ls
bin  sbin

可见文件已经复制过来了!

然后进入etc目录

# vim inittab

::sysinit:/etc/init.d/rcS

::respawn:-/bin/sh

::restart:/sbin/init

::ctrlaltdel:/sbin/reboot

::shutdown:/bin/umount -a -r

::shutdown:/sbin/swapoff -a

# vim profile

#!/bin/sh

echo "***************Start /etc/profile************************"

 

# Set search library path

export LD_LIBRARY_PATH=/lib:/usr/lib

 

# set user path

export PATH=/bin:/sbin:/usr/bin:/usr/sbin

 

#Set PS1

LOGNAME=$USER

PS1="[$USER@\h \W]\$"

HOSTNAME='/bin/hostname'

export USER LOGNAME PS1 PATH

 

echo "***************/etc/profile is done**********************"

echo –n

系统启动后的显示设置等信息:

[root@microcreat /]$ls

dev      home     mnt      sbin     usr

bin      lib      proc     sys      var

boot     etc      linuxrc  root     tmp

# vim fstab                             

#device  mount-point   type      option    dump    fsck    order

proc       /proc       proc      defaults   0       0

none       /tmp        ramfs     defaults   0       0

none       /var        ramfs     defaults   0       0

mdev       /dev        ramfs     defaults   0       0

sysfs      /sys        sysfs     defaults   0       0

这个文件是用来开机挂载的文件

# eouch mdev.conf

为空.

# mkdir sysconfig

# cd sysconfig

# vim HOSTNAME

microcreat

上面的名字可以换成你自己的名字,登陆后会出现这样的显示:

[root@microcreat /]$

保存退出.

最后etc的目录如下:

root@emboard:/workdir/at91sam9261/filesyetem/rootfs/etc# ls

fstab  init.d  inittab  mdev.conf  profile  sysconfig

然后进入init.d目录建立rcS文件:

root@emboard:/workdir/at91sam9261/filesyetem/rootfs/etc/init.d# vim rcS  

#!/bin/sh

echo "#-----Start /etc/init.d/rcS "

PATH=/sbin:/bin:/usr/sbin:/usr/bin

runlevel=S

prevlevel=N

umask 022

export PATH runlevel prevlevel

 

echo "#-----mount all......."

mount -a

 

echo "#-----starting mdev...."

echo /sbin/mdev>/proc/sys/kernel/hotplug

mdev -s

 

/bin/hostname -F /etc/sysconfig/HOSTNAME

 

echo "***********************************************"

echo "             Start ARM.....                    "

echo "             2010 04 11                        "

echo "             microcreat                        "

echo "***********************************************"

保存退出,这样一个简单的根文件系统已经建立完成了,现在可以制作成为cramfs文件系统烧人扳子运行了:

以下是挂载后的启动信息:

at91sam9_wdt: invalid timeout (must be between 1 and 16)

TCP cubic registered

NET: Registered protocol family 1

NET: Registered protocol family 17

rtc-at91sam9 at91_rtt.0: hctosys: unable to read the hardware clock

VFS: Mounted root (cramfs filesystem) readonly.

Freeing init memory: 108K

-----------------------------------------------------------------------------------------------------------

如果停在这里说明文件系统没有挂载成功,busybox没有启动起来.

-----------------------------------------------------------------------------------------------------------
init started: BusyBox v1.11.2 (2010-04-11 13:15:48 HKT)

starting pid 735, tty '': '/etc/init.d/rcS'

#-----Start /etc/init.d/rcS

#-----mount all.......

#-----starting mdev....

***********************************************

             Start ARM.....                   

             2010 04 11                       

             microcreat                       

***********************************************

starting pid 739, tty '': '-/bin/sh'

***************Start /etc/profile************************

***************/etc/profile is done**********************

[root@microcreat /]$

以上就是制作根文件系统的详细步骤:

                                                2010-4-11

                                                microcreat

 

下面的是摘抄网上的资料:
我们经常用busybox生成根文件系统,可是根文件系统起来以后命令行提示符只有一个“#”号,没有像linux发行版那样是[user@hostname currentpath] #,那么我们这里就说说如何让我们的根文件系统按这个方式显示。

  要修改命令行提示符,首先我们需要知道一个环境变量PS1,我们可以查看bash的帮助文档查看关于PS1的说明:

  bash有两级命令提示符,我们这里说的是第一级,这一级缺省的提示符是字符“$”(超级用户是“#”,我们可以通过修改PS1修改这个提示符,格式为:

  PS1=”command list”

  命令列表有很多参数如下:

  \! 显示该命令的历史记录编号。

  \# 显示当前命令的命令编号。

  \$ 显示$符作为提示符,如果用户是root的话,则显示#号。

  \\ 显示反斜杠。

  \d 显示当前日期。

  \h 显示主机名。

  \n 打印新行。

  \nnn 显示nnn的八进制值。

  \s 显示当前运行的shell的名字。

  \t 显示当前时间。

  \u 显示当前用户的用户名。

  \W 显示当前工作目录的名字。

  \w 显示当前工作目录的路径

  我们查看我们发行版linux中的PS1.

  $echo echo $PS1

  [\u@\h \W] \$

  看了发行版是如何显示命令行提示符,那么我们再看一下为什么我们做的根文件系统只显示一个#,用busybox生成的根文件系统使用的是ash,我们看下busybox中关于ash的文件。

  在busybox-1.15.4/shell/ash.h中有这样的语句

  /*

  * PS1 depends on uid

  */

  #if ENABLE_FEATURE_EDITING && ENABLE_FEATURE_EDITING_FANCY_PROMPT

  vps1.text = 'PS1=\\w ';

  #else

  if (!geteuid())

  vps1.text = 'PS1=# ';

  #endif

  结合上面PS1参数我们可以看出在busybox生成的根文件系统中可能出现两种显示方式,一种是“currentpath $”另一种是 “#”这两种显示在较老的版本中都有。

  按照上面的方法修改我们的根文件系统中的命令行提示符。首先我们需要修改buxybox中配置,添加如下两个选项:

  Busybox Settings --->

  Busybox Library Tuning --->

  [*] Username completion

  [*] Fancy shell prompts

  如果不选择上面两项,文件系统是不是别PS1这个环境变量的参数的。

  创建/etc/hostname添加如下内容(我们的主机名):

  farsight

  修改/etc/init.d/rcS添加如下内容(导入主机名配置文件):

  /bin/hostname –F /etc/hostname

  修改根文件系统中/etc/profile文件添加如下内容:

  HOSTNAM=`/bin/hostname`

  PS1=`[\u@\h \W]\# `

  export PS1 HOSTNAME

  创建/etc/passwd添加如下内容:

  root:x:0:0:root:/root:/bin/sh

  这个时候我们重新启动我们的开发板会发现命令行提示符已经是我们想要的那种现实了:

[root@farsight]#  /etc                                                                                                                                     

阅读(2532) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~