定制自己的嵌入式开发系统[小明]
时间:2006-08-24 来源:ming_nuaa
+ 现在从事基于Linux的HMC(HOME MEDIA CENTER)开发.
+ 小弟的环境和九贱不一样,介绍一下:
+ 主机:ubuntu5.10.
+ 硬盘分区:/dev/hda1 ext3 系统占用
+ /dev/hda5 ext3 开发使用
+ /dev/hda6 swap
+ 系统引导采用grub.
+ <第一步>
+ 建立工作目录,九贱说的太复杂,小弟精简如下:
+ 项目根目录/home/xxx/project设为PRJROOT
+ #export PRJROOT=/home/xxx/project àxxx为用户名
+ #cd ${PRJROOT}
+ #mkdir build-tools kernel tools images
+ 准备工具:
+ Buildroot-20060810.tar.bz2
+ 如上文所说, buildroot事实上是一个脚本与补丁的集合,其它需要用到的软件,如gcc、uClibc,
+ 你只需在buildroot中指明相应的版本,它会自动去给你下载。所以下面的软件清单大家不要害怕,
+ 只要wget可以联网,下面的东东大家不用担心的.
+ 当然了,如果你和我一样处于公司的局域网封锁中,就只有一个一个下载了L
+ 软件清单:
autoconf-2.60.tar.bz2
automake-1.9.6.tar.bz2
bash-3.1.tar.gz
binutils-2.16.1.tar.bz2
busybox-snapshot.tar.bz2
bzip2-1.0.3.tar.gz
ccache-2.4.tar.gz
coreutils-5.96.tar.bz2
diffutils-2.8.7.tar.gz
dropbear-0.48.1.tar.gz
e2fsprogs-1.38.tar.gz
ed_0.2-19.diff.gz
ed_0.2.orig.tar.gz
fakeroot_1.5.8.tar.gz
file-4.17.tar.gz
findutils-4.2.27.tar.gz
flex_2.5.4a-24.diff.gz
flex_2.5.4a.orig.tar.gz
gawk-3.1.5.tar.bz2
gcc-3.4.2.tar.bz2
gdb-6.3.tar.bz2
genext2fs_1.3.orig.tar.gz
grep_2.5.1.ds1.orig.tar.gz
gzip-1.3.5.tar.gz
hdparm-6.5.tar.gz
less-394.tar.gz
libtool-1.5.22.tar.gz
linux-libc-headers-2.4.31.tar.bz2
m4-1.4.4.tar.bz2
make-3.81.tar.bz2
ncurses-5.5.tar.gz
netkit-base-0.17.tar.gz
patch_2.5.9.orig.tar.gz
pci.ids.bz2
pciutils-2.1.11.tar.gz
zlib-1.2.3.tar.bz2
+ 将buildroot-20060810.tar.bz2拷贝到${PRJROOT}/build-tools
+ #tar jxvf builtroot-20060810.tar.bz2
+ #cd buildroot
+ #mkdir dl à把软件清单中的软件放进去.不放也可.这个文件夹会自动生成,buildroot会自动下载到此.
+ #make menuconfig à如果系统没有安装ncurses看不到图形化配置界面,建议先装ncurses.
+ 默认的就不管了,有兴趣的自己研究研究.我们需要更改的地方如下:
1) Build options à
(${PRJROOT}/tools) Toolchain and header file location?
2) Board Support Options à
[*]Generic development system à要选中,不选也可.后面3)可以选择.
3) Package Selection for the target à
[*]SDL
+这里的选项要自己斟酌,选取自己需要的.小弟选取了SDL.其他的如python或许有人需要.
+这里选取了,软件清单相应会多.
4) Toolchain Options --->
GCC compiler Version (gcc 3.4.2) --->;
[*]Build/install c++ compiler and libstdc++?
[ ]Build/install java compiler and libgcj?
+ 配置完成.
+ #make
+ 这里说说可能出现的几个错误:
+ ①:build_i386/busybox/modutils/lsmod.c 96 113
+ 原因:my_query_module()函数第三个参数有误
+ 解决:分别来函数第三个参数项前加(void*).如右所示: my_query_module(,,(void*),,)
+ ②:build_i386/busybox/modutils/rmmod.c 76
+ 原因以及解决方法如①;
+ ③:build_i386/busybox/networking/ping.c 214
+ 原因:SWAP_BE16(ntransmitted++)调用错误
+ 解决:将ntransmitted++提出作为215行.
+ 214行pkt->icmp_seq= SWAP_BE16(ntransmitted);
+ ④:gcc-3.4.2-final/i386-linux-uclibc/libstdc++-v3/include/ext/rope 934:
+ 这个是由于index的预定义与这里冲突
+ 解决方法:874行,添加:#undef index
+ 编译完成
+ #cp –af build_i386/root ${PRJROOT}/
+ 这样rootfs就完成了.其中包括了我们需要的gcc,uclibc,automake,autoconf,m4等.
+ <第二步>
+ 下面开始编译内核.具体的编译过程如下:
+ 1,下载内核源码:版本随意,编译后不影响系统运行.
+ 2,编译内核
+ #tar jxvf Linux-2.4.31.tar.bz2
+ #cd linux-2.4.31
+ #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
+ 编译完成后
+ #cp arch/i386/boot/bzImage ${PRJROOT}/images/bzImage-2.4.31-rmk1
+ 借用九贱的管理方法,后缀名不同来区分版本.
+ 内核编译清单参照九贱.这里直接引用了,如下所示.
内核编译记录:
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 --->;
+ <第三步>
+ 这一步是建立文件系统.由于我们以前的选择,所以这里不用和九贱一样麻烦了.
+ #cd ${PRJROOT}/root
+ #mkdir boot
+ #cp ../images/bzImage-2.4.31-rmk1 boot/vmlinux
+ ^_^,大功告成了.
+ 检验一下:
+ #chroot . /bin/sh
+ ^_^,模拟测试成功!
+ 剩下的就是把小系统安装到硬盘上了
+ 在本机的/boot/grub 目录下编辑menu.lst
+ 在本系统启动项后添加
+ title Mylinux
+ root (hd0,4)
+ kernel /boot/vmlinux root=/dev/hda5
+ initrd /linuxrc