原创 Embedded Linux From Scratch In 40 Minutes

2009-11-25 17:29 3326 9 9 分类: MCU/ 嵌入式

linux下手之前有点怕,需要很多很多的知识才可以构建一个嵌入式linux系统,我指的是每一个步骤你头脑里面都有很清晰的概念,而不是书上指示的流水帐。很多高手的经验是一步一步动手折腾自己的开发板开始,问题是书上作者的实验环境比如开发板跟实际有很大的出入。所以我选择人人都有的x86平台几行一番实验,目标是40分钟构建一个最基本的linux,学会:
1:linux kernel 配置和编译;
2:根文件系统的创建;
3:busybox 编译安装;
4:设备文件的创建;
5:系统初始化脚本;
实验过后,延伸的很多问题也许你就有兴趣去阅读教材了。
/**********************************************************************************/
第一个目标:linux映像文件
下载linux-2.6源码解压
make ARCH="x86" i386_defconfig 
make ARCH="x86" gconfig
 make bzImage
生成的内核压缩映像位于/arch/x86/boot/bzImage
点击看大图


/**********************************************************************************/
第二个目标:安装qemu
跨平台仿真器,支持x86,x86_64,ppc,arm,sparc,mips,m68k
两种仿真方式:
1完全系统模拟:处理器与外设
例如:
qemu linux.img
2用户程序模拟:可以运行为其他cpu编译的程序
例如:
qemu­arm ­L /usr/local/arm/3.3.2 \<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


/home/bart/arm/busybox­1.00­pre8/busybox ls
下载qemu
make
make PREFIX="/your/dir" install
最后将qemu的路径加入环境变量


点击看大图
/**********************************************************************************/
现在可以试一下啦
在/linux-2.6.24.6/arch/x86/boot>路径打开终端
note:
Linux boot specific:
-kernel bzImage use 'bzImage' as kernel image
输入:
qemu -kernel ./bzImage
内核可以正常解压,,,,,然后就挂了
VFS抱怨说找不到根文件系统!
点击看大图


 


我们先安装busybox先
第三个目标:编译安装busybox
busybox是瑞士军刀,一个可执行文件包含大多数unix命令行工具,甚至是web浏览器!mini的身材,静态连接glibc时可以less than 1MB,动态连接可以小于500kb,非常方便的裁减配置界面。
下载busybox解压
make menuconfig
enable:busybox settings-》build options-》build busybox as a static binary(no share libs)
enable:busybox settings-》installation options-》dont use /usr
make
make install
在_install/目录有如下
./_install/
|-- bin
|   |-- [ -> busybox
|   |-- [[ -> busybox
|   |-- addgroup -> busybox
|   |-- busybox
|-- linuxrc -> bin/busybox
`-- sbin
    |-- acpid -> ../bin/busybox
    |-- adjtimex -> ../bin/busybox
/**********************************************************************/


第四个目标:创建根文件系统
1创建一个填满0的空文件,大小10M
dd if=/dev/zero of=rootfs.img bs=1k count=10240
2把它格式化成ext2 filesyste
mkfs.ext2 ­-i 1024 ­-F rootfs.img
3创建一个挂点
mkdir /mnt/rootfs
4然后把刚才的跟文件系统利用loop设备挂到这个点来
mount ­o loop rootfs.img /mnt/rootfs
5现在你可以利用loop设备修改rootfs.img的内容了,进入/mnt/rootfs目录
mkdir etc dev proc sys

6拷贝busybox的文件树到根文件系统
rsync ­a busybox/_install/ /mnt/rootfs/


chown ­R root:root /mnt/rootfs/
sync
7创建设备节点
mknod /mnt/rootfs/dev/console c 5 1


mknod /mnt/rootfs/dev/null c 1 3


设备主副编号可以参考自己主机的:


ls ­l /dev/console


ls ­l /dev/null
进入看看根文件系统ls看看
8创建 busybox init初始化脚本/etc/init.d/rcS
mkdir /etc/init.d
vi rcS
脚本如下
#!/bin/sh


mount ­t proc none /proc


mount ­t sysfs none /sys


#ifconfig eth0 172.20.0.2


#route add default gw 172.20.0.1


#/usr/sbin/httpd ­h /www/ &


/bin/sh

大功告成!
运行试一下:
qemu -hda ./rootfs.img -kernel /home/panasonic/downloads/linux-2.6.24.6/arch/x86/boot/bzImage -append root="/dev/hda" rw init="/etc/init".d/rcS


点击看大图
qemu的参数可以运行qemu --help查看
注意:root=/dev/hda rw init="/etc/init".d/rcS
这是命令行参数,rw不可以少,不然就是readonly的文件系统了,init=/etc/init.d/rcS指定初始化脚本不然会出现permission denial的提示

文章评论0条评论)

登录后参与讨论
我要评论
0
9
关闭 站长推荐上一条 /2 下一条