高手进阶 学会做嵌入式Linux操作系统
4、 建立/dev下边的设备文件 在linux中,所有的的设备文件都存放在/dev中,使用mknod命令创建基本的设备文件。 mknod命令需要root权限,不过偶本身就是用的root用户,本来是新建了一个用户专门用于嵌入式制作的,不过后来忘记用了…… # mknod -m 600 mem c 1 1 # mknod -m 666 null c 1 3 # mknod -m 666 zero c 1 5 # mknod -m 644 random c 1 8 # mknod -m 600 tty0 c 4 0 # mknod -m 600 tty1 c 4 1 # mknod -m 600 ttyS0 c 4 64 # mknod -m 666 tty c 5 0 # mknod -m 600 console c 5 1 基本的设备文件建立好后,再创建必要的符号链接: # ln -s /proc/self/fd fd # ln -s fd/0 stdin # ln -s fd/1 stdout # ln -s fd/2 stderr # ls console fd mem null random stderr stdin stdout tty tty0 tty1 ttyS0 zero
设备文件也可以不用手动创建,听说RedHat /dev下的脚本MAKEDEV 可以实现这一功能,不过没有试过……
基本上差不多了,不过打算用硬盘/CF卡来做存储设备,还需要为它们建立相关文件,因为我的CF在目标机器上是CF-to-IDE,可以把它们等同来对待,先看看Redhat 下边had的相关属性: # ls -l /dev/hda brw-rw---- 1 root disk 3, 0 Jan 30 2003 /dev/hda # ls -l /dev/hda1 brw-rw---- 1 root disk 3, 1 Jan 30 2003 /dev/hda1 对比一下,可以看出,had类型是b,即块设备,主编号为3,次编号从0递增,根限位是 rw-rw----,即660,所以: # mknod -m 660 hda b 3 0 # mknod -m 660 hda1 b 3 1 # mknod -m 660 hda2 b 3 2 # mknod -m 660 hda3 b 3 3
5、添加基本的应用程序 未来系统的应用程序,基本上可以分为三类: 基本系统工具,如ls、ifconfig这些…… 一些服务程序,管理工具,如WEB、Telnet…… 自己开发的应用程序
这里先添加基本的系统工具,有想过把这些工具的代码下载下来交叉编译,不过实在是麻烦,用BusyBox,又精简又好用…… 将busybox-1.00.tar.gz下载至sysapps目录下,解压: #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编译进去。
上一篇:修正Linux下丑陋的FireFox表单控件问题 下一篇:实用技巧两则 主机名修改与Cat命令退出 更多相关文章
|
推荐文章
精彩文章
|