在公司想利用闲暇时间调试嵌入式开发板,可惜开发板在家里,无法直接调试,因此想借助virtualBox x86平台搭建一个类似于嵌入式开发的环境.
家里的EBD2410开发板使用uboot加载内核和ramdisk文件系统,在X86平台上,可以使用PXE网络启动的方式,加载kernel和initrd,这不就基本等同了嵌入式系统的加载启动方式吗?哈哈
这个基本的测试环境中,使用gcc编译linux内核源码,以及busybox源码来生成initrd,经测试能加载成功。
[宿主机环境]
1: Virtualbox 4.10
2: Ubuntu10.04, gcc-4.4.3
[目标机环境]
1: virtualbox 4.10
vitalbox的配置为:
网卡: PCnet-PCI II (默认的Intel网卡不支持PXE启动,可能是virtualbox的bug?)
声卡: Intel HD Audio
[宿主机软件环境搭建]
1: 搭建TFTP服务器
- 参考blog相关文章
2: 搭建DHCP服务器
- 参考blog相关文章
3: 准备pxelinux.0 文件
- 下载 syslinux 并解压: http://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-4.06.zip
- 拷贝core/pxelinux.0 到 tftp root下
4: 配置tftp_root/default内容为:
$cat pxelinux.cfg/default
DISPLAY boot.txt
DEFAULT squeeze_amd64_install
LABEL eric
kernel eric/bzImage
append vga=normal init=/linuxrc initrd=eric/ramdisk.gz --
PROMPT 1
TIMEOUT 0
其中 bzImage为编译出来的kernel, initrd为我们手动制作的initrd文件(稍后描述)
[编译kernel]
这里使用的是linux-2.6.37kernel
1: $make i386_defconfig
2: make menuconfig //打开ext2支持,以及AMD PCnet32 PCI support
3: make bzImage
完成后拷贝boot/arch/x86/bzImage 到tftp_root/eric下
[制作ramdisk]
1: dd if=/dev/zero of=./ramdisk bs=1k count=8192
生成一个8M的ramdisk文件
2: sudo mke2fs -F -v -m0 ./ramdisk
3: sudo mount -o loop ./ramdisk ramdisk_mnt/
把image文件mount到一个目录,随后可以往这个目录拷贝文件
4: 编译busybox
使用的是busybox-1.20.0,直接使用default config
make; make install;
然后cp -ar _install/* 到ramdisk_mnt下
5: 拷贝宿主机的dev文件到ramdisk中
6: 创建fstab文件
$ cat etc/fstab
# Begin /etc/fstab
# file system mount-point type options dump fsck
# order
proc /proc proc nosuid,noexec,nodev 0 0
sysfs /sys sysfs nosuid,noexec,nodev 0 0
devpts /dev/pts devpts gid=4,mode=620 0 0
tmpfs /run tmpfs defaults 0 0
devtmpfs /dev devtmpfs mode=0755,nosuid 0 0
# End /etc/fstab
7: 创建rcS文件
$ cat etc/init.d/rcS
#!/bin/sh
mount -o sys /sys
mount -o proc /proc
8: 打包生成
$ sudo umount ramdisk
$gzip ramdisk
$cp ramdisk ${tftp_root}/eric/
Client PXE启动:
Client PXE加载kernel成功启动后:
资源备份:
http://pan.baidu.com/share/link?shareid=121174&uk=822921326