我也来学做嵌入式Linux系统V0.1
|
|
|
|
|
前一章,我们把编译好的内核、应用程序、配置文件都拷贝至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 编辑: 作者: |
|
相关新闻 |
|
|
|
|
|