手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网站运营>建站经验>列表

我也来学做嵌入式Linux系统V0.1(完整版)

来源:互联网 作者:west263.com 时间:2008-04-16
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!


准备工具
Linux内核源码,我选用的是Linux-2.4.27.tar.bz2

编译内核
将Linux-2.4.27.tar.bz2拷贝至${PRJROOT}/kernel,解压
#cd linux-2.4.27
//配置
# make ARCH=i386 CROSS_COMPILE=i386-linux- menuconfig
//建立源码的依存关系
# make ARCH=i386 CROSS_COMPILE=i386-linux- clean dep
//建立内核映像
# make ARCH=i386 CROSS_COMPILE=i386-linux- bzImage
ARCH指明了硬件平台,CROSS_COMPILE指明了这是交叉编译,且编译器的名称为i386-linux-XXX,这里没有为编译器指明路径,是因为我前面已将其加入至环境变量PATH。

又是个漫长的等待……
OK,编译完成,673K,稍微大了点,要移到其他平台,或许得想办法做到512以下才好,回头来想办法做这个工作。

安装内核
内核编译好后,将内核及配置文档拷贝至${PRJROOT}/images下。
# cp arch/i386/boot/bzImage ${PRJROOT}/images/bzImage-2.4.27-rmk5
# cp vmlinux ${PRJROOT}/images/vmlinux-2.4.27-rmk5
# cp System.map ${PRJROOT}/images/System-2.4.27-rmk5
# cp .config ${PRJROOT}/images/2.4.27-rmk5

我采用了后缀名的方式重命名,以便管理多个不同版本的内核,当然,您也能够不用这样,单独为每个版本的内核在images下新建对应文档夹也是可行的。

安装内核模块
完整内核的编译后,剩下的工作就是建立及安装模块了,因为我的内核并没有选择模块的支持(这样扩展性差了一点,但是对于我的系统来说,功能基本上定死了,这样影响也不太大),所以,剩下的步骤也省去了,假如您还需要模块的支持,应该:
//建立模块
#make ARCH=i386 CROSS_COMPILE=i386-linux- modules
//安装内核模块至${PRJROOT}/images
#make ARCH=i386 CROSS_COMPILE= i386-linux- \
>;INSTALL_MOD_PATH=${PRJROOT}/images/modules-2.4.18-rmk5 \
>;modules_install

最后一步是为模块建立依存关系,不能使用原生的depmod来建立,而需要使用交叉编译工具。需要用到busybox中的depmod.pl脚本,很可惜,我在busybox1.0.0中,并没有找到这个脚本,所以,还是借用了busybox0.63中scripts中的depmod.pl。
将depmod.pl拷贝至${PREFIX}/bin目录中,也就是交叉编译工具链的bin目录。
#depmod.pl \
>;-k ./vmlinux –F ./System.map \
>;-b ${PRJROOT}/images/modules-2.4.27-rmk5/lib/modules >; \
>;${PRJROOT}/images/modules-2.4.27-rmk5/lib/modules/2.4.27-rmk5/modules.dep

注:后面讨论移植内核和模块内容时,我只会提到内核的拷贝,因为我的系统并没有模块的支持。假如您需要使用模块,只需按相同方法将其拷贝至相应目录即可。

附,内核编译清单
附,内核选择:
内核编译记录:
Code maturity level options 不选
Loadable module support 不选
Processor type and features 根据实际,选择处理器类型
General setup --->;
[*] Networking support
[*] PCI support
(Any) PCI access mode
[*] PCI device name database
[*] System V IPC
[*] Sysctl support
(ELF) Kernel core (/proc/kcore) format
[*] Kernel support for ELF binaries
[*] Power Management support

Memory Technology Devices (MTD) --->; MTD设备,我用CF卡,不选

Parallel port support --->; 不选
Plug and Play configuration --->; 我的系统用不着即插即用,不选

Block devices --->;
[*] Loopback device support
[*] RAM disk support
(4096) Default RAM disk size (NEW)
[*] Initial RAM disk (initrd) support

Multi-device support (RAID and LVM) --->; 不选

Networking options --->; 基本上都选了

ATA/IDE/MFM/RLL support --->; 用了默认的

Telephony Support --->; 不选

SCSI support --->; 不选

Fusion MPT device support --->; 不选

I2O device support --->; 不选

Network device support --->; 根据实际情况选择

Amateur Radio support --->; 不选

IrDA (infrared) support --->; 不选

ISDN subsystem --->; 不选

Old CD-ROM drivers (not SCSI, not IDE) --->; 不选

Input core support --->; 不选

Character devices --->;
[*] Virtual terminal
[*] Support for console on virtual terminal
[*] Standard/generic (8250/16550 and compatible UARTs) serial support
[*] Support for console on serial port

Multimedia devices --->; 不选

File systems --->;
[*] Kernel automounter version 4 support (also supports v3)
[*] Virtual memory file system support (former shm fs)
[*] /proc file system support
[*] Second extended fs support

Console drivers --->;
[*] VGA text console 调试时接显示器用

剩下三个都不要
Sound --->;
USB support --->;
Kernel hacking --->;

第四章 建立根文档系统
1、建立目录
构建工作空间时,rootfs文档夹用来存放根文档系统,
#cd rootfs
根据根文档系统的基本结构,建立各个对应的目录:

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!