首页>计算机>Linux认证>应用技术>正文
我也来学做嵌入式Linux系统V0.1

www.zige365.com 2007-8-21 16:48:16 点击:发送给好友 和学友门交流一下 收藏到我的会员中心
#tar zxvf busybox-1.00.tar.gz
  #cd busybox-1.00
  
  //进入配置菜单
  
  #make TARGET_ARCH=i386 CROSS=i386-linux- PREFIX=${PRJROOT}/rootfs menuconfig
  
  //建立依存关系
  
  #make TARGET_ARCH=i386 CROSS= i386-linux- PREFIX=${PRJROOT}/rootfs dep
  
  //编译
  
  #make TARGET_ARCH=i386 CROSS= i386-linux- PREFIX=${PRJROOT}/rootfs
  
  //安装
  
  #make TARGET_ARCH=i386 CROSS= i386-linux- PREFIX=${PRJROOT}/rootfs install
  
  # cd ${PRJROOT}/rootfs/bin
  # ls
  addgroup busybox chown delgroup echo   kill  ls   mv    ping rm   sleep
  adduser  chgrp  cp   deluser  grep   ln   mkdir netstat ps  rmdir umount
  ash    chmod  date  dmesg   hostname login mount pidof  pwd  sh   vi
  
  一下子多了这么多命令……
  
  配置busybox的说明:
  
  A、如果编译时选择了:
  
  Runtime SUID/SGID configuration via /etc/busybox.conf
  
  系统每次运行命令时,都会出现“Using fallback suid method ”
  
  可以将它去掉,不过我还是在/etc为其建了一个文件busybox.conf搞定;
  
  B、[*] Do you want to build BusyBox with a Cross Compiler?                   (i386-linux-gcc) Cross Compiler prefix
  
  这个指明交叉编译器名称(其实在编译时的命令行已指定过了……)
  
  C、安装选项下的(${PRJROOT}/rootfs) BusyBox installation prefix,这个指明了编译好后的工具的安装目录。
  
  D、静态编译好还是动态编译好?即是否选择
  
  [ ] Build BusyBox as a static binary (no shared libs)
  
  动态编译的最大好处是节省了宝贵空间,一般来说都是用动态编译,不过我以前动态编译出过问题(其实是库的问题,不关busybox的事),出于惯性,我选择了静态编译,为此多付出了107KB的空间。
  
  E、其它命令,根据需要,自行权衡。
  
  6、系统初始化文件
  
  内核启动时,最后一个初始化动作就是启动init程序,当然,大多数发行套件的Linux都使用了与System V init相仿的init,可以在网上下载System V init套件,下载下来交叉编译。另外,我也找到一篇写得非常不错的讲解如何编写初始化文件的文件,bsd-init,回头附在后面。不过,对于嵌入式系统来讲,BusyBox init可能更为合适,在第6步中选择命令的时候,应该把init编译进去。
  
  #cd ${PRJROOT}/rootfs/etc
  #vi inittab
  
  我的inittal文件如下:
  
  #指定初始化文件
  
  ::sysinit:/etc/init.d/rcS
  
  #打开一个串口,波特率为9600
  
  ::respawn:/sbin/getty 9600 ttyS0
  
  #启动时执行的shell
  
  ::respawn:/bin/sh
  
  #重启时动作
  
  ::restart:/sbin/init
  
  #关机时动作,卸载所有文件系统
  
  ::shutdown:/bin/umount -a –r
  
  保存退出;
  
  再来编写rcS脚本:
  
  #mkdir ${PRJROOT}/rootfs/etc/init.d
  #cd ${PRJROOT}/rootfs/etc/init.d
  #vi rcS
  
  我的脚本如下:
  
  #!/bin/sh
  
  #Set Path
  PATH=/sbin:/bin
  export PATH
  
  syslogd -m 60
  klogd
  
  #install /proc
  mount -n -t proc none /proc
  
  #reinstall root file system by read/write mode(need: /etc/fstab)
  mount -n -o remount,rw /
  
  #reinstall /proc
  mount -n -o remount,rw -t proc none /proc
  
  #set lo ip address
  ifconfig lo 127.0.0.1
  
  #set eth0 ip address
  
  #当然,这样子做只是权宜之计,最后做的应该是在这一步引导网络启动脚本,像RedHat
  
  #那样,自动读取所有指定的配置文件来启动
 
  ifconfig eth0 192.168.0.68 netmask 255.255.255.0
  
  #set route
  
  #同样的,最终这里应该是运行启动路由的脚本,读取路由配置文件
  
  route add default gw 192.168.0.1
  
  #还差一个运行服务程序的脚本,哪位有现成的么?
  
  #网卡/路由/服务这三步,事实上可以合在一步,在rcS这一步中,做一个循环,运行指定启动目录下的所有脚,先将就着这么做吧,确保系统能够正常启动了,再来写这个脚本。
  
  #set hostname
  hostname MyLinux
  
  保存退出。
  
  编写fstab文件
  
  #vi fstab
  
  我的fstab很简单:
  
  /dev/hda1 / ext2 defaults 1 1
  none /proc proc defaults 0 0
  
  第五章 让MyLinux能够启动

本新闻共6页,当前在第5页  1  2  3  4  5  6  

我要投稿 新闻来源:chinaitlab 编辑: 作者:
相关新闻
红旗linux认证模拟题库仅供参考(1)
红旗linux认证模拟题库仅供参考(2)
红旗linux认证模拟题库仅供参考(3)
红旗linux认证模拟题库仅供参考(5)
红旗linux认证模拟题库仅供参考(6)
红旗linux认证模拟题库仅供参考(7)