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

www.zige365.com 2007-8-21 16:48:16 点击:发送给好友 和学友门交流一下 收藏到我的会员中心
 前一章,我们把编译好的内核、应用程序、配置文件都拷贝至rootfs目录对应的子目录中去了,这一步,就是把这些文件移植至目标机的存储器。这里,我是先另外拿一块硬盘,挂在我的开发机上做的测试,因为我的本本用来写文档,PC机用来做开发机,已经没有另外的机器了……但是本章只是讲述一个一般性的过程,并不影响你直接在目标主机上的工作。
  
  因为以后目标机识别硬盘序号都是hda,而我现在直接挂上去,则会是hdb、hdc……这样,安装lilo时有点麻烦(虽然也可以实现)。所以我想了另一个办法:
  
  把新硬盘挂在IDE0的primary上,进入linux后,会被认为是had;
  
  原来主机的装Redhat的硬盘,我将它从IDE0的primary上变到了IDE1 的primary,因为它的lilo早已装好,基本上不影响系统的使用;
  
  分区和格式化
  
  BIOS中改为从第二个硬盘启动;也就是从我原来开发机启动,新的硬盘被识别成了had。
  
  #fdisk /dev/hda
  
  用d参数删除已存在的所有分区
  
  用n参数新建一个分区,也是就/dev/hda1
  
  格式化
  
  #mkfs.ext2 /dev/hda1
  
  安装bootloader
  
  因为我是X86平台,所以直接用了lilo,如果你是其这平台,当然,有许多优秀的bootloader供你选择,你只需查看其相应的说明就可以了。
  
  编译lilo配置文件,我的配置文件名为target.lilo.conf,置于${PRJROOT}/rootfs/etc目录。内容如下所示:
  
  boot=/dev/hda
  disk=/dev/hda
  bios=0x80
  image=/boot/bzImage-2.4.18-rmk5
  label=Linux
  root=/dev/hda1
  append="root=/dev/hda1"
  read-only
  
  //新建文件夹,为mount做新准备
  
  #mkdir /mnt/cf
  
  //把目标硬盘mount上来
  
  #mount –t ext2 /dev/hdc1 /mnt/cf
  
  回到rootfs
  
  #cd ${PRJROOT}/rootfs
  
  拷贝所有文件至目标硬盘
  
  #cp –r * /mnt/cf
  
  这样,我们所有的文件都被安装至目标硬盘了,当然,它还不能引导,因为没有bootloader。使用如下命令:
  
  # lilo -r /mnt/cf -C etc/target.lilo.conf
  Warning: LBA32 addressing assumed
  Added Linux *
  
  -r :改变根目标为/mnt/cf ,这样配置文件其实就是/mnt/cf/etc/target.lilo.conf,也就是我们先前建立的文件。
  
  当然,完成这一步,需要lilo22.3及以后版本,如果你的版本太旧,比如Redhat9.0自带的,就会出现下面的信息:
  
  #lilo –r /mnt/cf –C etc/target.lilo.conf
  Fatal: open /boot/boot.b: No such file or directory
  
  这时,你需要升级你的lilo,或者重新安装一个。
  
  启动系统
  
  #umount /mnt/cf
  #reboot
  
  将BIOS改为从IDE0启动,也就是目标硬盘。如果一切顺利,你将顺利进入一个属于你的系统。
  
  回头再来看看我们的工作空间吧
  
  [root@skynet lib]# df /dev/hda1
  Filesystem      1K-blocks   Used Available Use% Mounted on
  /dev/hda1       3953036   1628  3750600  1% /mnt/cf
  
  总共花去了我1628KB的空间,看来是没有办法放到软盘里边去了^o^,不过一味求小,并不是我的目标。
  
  [root@skynet skynet]# ls ${PRJROOT}
  bootloader build-tools debug doc images kernel rootfs sysapps tmp tools
  
  这几个目录中的文件,呵呵,与本文一开头规划的一样
  
  [root@skynet skynet]# ls build-tools/
  buildroot buildroot-0.9.27.tar.tar
  
  包含了buildroot源码及压缩包,事实上buildroot下边还包括了GNU其它工具的源码、编译文件等诸多内容,是我们最重要的一个文件夹,不过到现在它已经没有多大用处了,如果你喜欢,可以将它删除掉(不建议)。
  
  [root@skynet skynet]# ls images
  
  2.4.18-rmk5 bzImage-2.4.18-rmk5 System-2.4.18-rmk5 vmlinux-2.4.18-rmk5
  
  内核映像及配置文件等,如果你有模块,因为还有相应的目录
  
  [root@skynet skynet]# ls kernel/
  linux-2.4.27 linux-2.4.27.tar.bz2
  
  内核源码及压缩包
  
  [root@skynet skynet]# ls rootfs/
  bin boot dev etc home lib linuxrc proc root sbin tmp usr var
  
  制作好的根文件系统,重中之重,注意备份……
  
  [root@skynet skynet]# ls sysapps/
  busybox-1.00 busybox-1.00.tar.gz
  
  busybox-1.00源码包,或许你还要继续添加/删除一些命令……
  
  [root@skynet skynet]# ls tools
  bin i386-linux i386-linux-uclibc include info lib man
  
  这个也很重要,我们制作好的交叉开发工具链。如果你要继续开发程序,这个目录重要性就很高了。
  
  其它目录暂时是空的。
  
  第六章 完善MyLinux
  
  关于进一步的调试,你可以在开发机上使用chroot /mnt/cf /bin/sh这样的命令,以使我们在目标根文件系统上工作。
  
  支持多用户
  
  因为我在编译busybox时,已经将它的多用户那一大堆命令编译了进来。现在关键是的要为其建立相应的文件;
  
  进入原来的开发机,进入rootfs目录,切换根目录
  
  #chroot rootfs/ /bin/sh
  
  A、 建立/etc/passwd文件,我的文件内容如下:
  
  root:x:0:0:root:/root:/bin/bash
  
  B、 建立/etc/group文件,我的文件内容如下:
  
  root:x:0:
  bin:x:1:
  sys:x:2:
  kmem:x:3:
  tty:x:4:
  tape:x:5:
  daemon:x:6:
  disk:x:7:
  
  C、 为root建立密码
  
  #passwd root
  
  试试用addgroup/addusr……这堆命令。然后重启,从目标硬盘上启动;从console口,9600登陆试试(因为我在inittab中启用了ttyS0,我未来的目标机,是没有显卡的,需要从console口或SSH进去管理)
  
  MyLinux login: root
  Password:
  
  BusyBox v1.00 (2004.10.10-04:43+0000) Built-in shell (ash)
  Enter 'help' for a list of built-in commands.
  
  ~ #
  
  成功了……
  
  增加WEB Server
  
  Busybox里边有httpd选项,不过我编译时并没有选择,所以还是自己来安装。我使用的软件是thttpd-2.25b.tar.gz,将它移至sysapps目录下。
  
  [root@skynet sysapps]# tar zxvf thttpd-2.25b.tar.gz
  [root@skynet sysapps]# cd thttpd-2.25b
  
  //配置
  
  [root@skynet thttpd-2.25b]# CC=i386-linux-gcc ./configure --host=$TARGET
  ……
  i386-linux-gcc -static htpasswd.o -o htpasswd -lcrypt
  make[1]: warning: Clock skew detected. Your build may be incomplete.
  make[1]: Leaving directory `/home/skynet/sysapps/thttpd-2.25b/extras'
  
  //拷贝至根文件目录
  
  [root@skynet thttpd-2.25b]# cp thttpd ${PRJROOT}/rootfs/usr/sbin
  
  //trip处理
  
  [root@skynet thttpd-2.25b]# i386-linux-strip ${PRJROOT}/rootfs/usr/sbin/thttpd

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

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