Chinaunix首页 | 论坛 | 博客
  • 博客访问: 316908
  • 博文数量: 90
  • 博客积分: 4010
  • 博客等级: 上校
  • 技术积分: 694
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-22 10:51
文章分类

全部博文(90)

文章存档

2011年(3)

2010年(35)

2009年(52)

我的朋友

分类: LINUX

2009-06-15 09:50:17

根文件系统制作:手动创建基本目录结构,各目录的功能了解;
从下载busybox-1.9.1.tar.bz2源码包并解压;
修改makefile:
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?=
改为
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-

Make defconfig
Make menuconfig
配置(编译器上面已经修改)及安装路径;选择ash;
Make
Make install

Bootloader中内核参数init=/linuxrc,内核启动后首先执行/linuxrc(busybox的一个符号链接):
设置信号处理程序;
初始化console;
解析/etc/inittab文件;
执行系统初始化脚本,默认是/etc/init.d/rcS;
执行inittab中的wait程序;
执行inittab中的once程序;

此后init程序循环执行以下步骤:
执行inittab中类型为respawn的程序,若终止,再次执行它;
收到用户请求,执行inittab中类型askfirst程序;

Linuxrc需要读取设备文件/dev/console和/dev/null,手动创建这些:
Cd rootfs/dev; sudo mknod –m 600 console c 5 1; sudo mknod –m 666 null c 1 3
常见文件的设备号可查看Document/devices.txt文件中查看;

rcS中,mount –a 作用是根据/etc/fstab配置文件提供的信息mount一些文件系统:
rootfs/etc/fstab:
proc /proc proc defaults 0 0
sys /sys sysfs defaults 0 0

接下来系统会执行到/sbin/getty 115200 s3c2410_serial0
所以需要创建设备文件:
Cd Rootfs/dev; sudo mknod –m 600 s3c2410_serial0 c 204 64
可查看/Document/arm/Samsung-S3C24XX/Overview.txt中设备号;

打开虚拟终端后会提示输入用户名和密码:
创建passwd和group:
Passwd: root::0:0:root:/:/bin/sh
Group: root::0:
这样创建了一个root帐号,没有密码,如需要密码,可以把主机/etc/shadow文件中root帐号那行放入开发板根文件系统中;

由于busybox需要glibc支持,关于共享库的查找规则:
首先在LD_LIBRARY_PATH所记录的路径中查找;
然后从缓存文件/etc/ld.so.cache中查找。
将路径写入/etc/ld.so.conf然后执行ldconfig命令即可生成;
然后到系统默认路径/lib /usr/lib下查找;

前面制作交叉编译工具时已经编译了glibc,拷贝库到根文件系统:
Cp –a /opt/crosstool/gcc-4.0.2-glibc-2.3.6/arm-linux/arm-linux/lib/* ~/rootfs/lib/
Busybox中不含ldconfig,将前面生成的ldconfig拷贝到根文件系统:
Cp crosstool-0.43/build/arm-linux/gcc-4.0.2-glibc-2.3.6/build-glibc/elf/ldconfig rootfs/sbin/

现在可以通过NFS启动系统了;

mdev是裁剪过的udev,mdev需要一个配置文件/etc/mdev.conf,用touch建立一个;
rcS中:
mount –t tmpfs mdev /dev
mdev –s
mkdir /dev/input
ln –s /dev/mice /dev/input/mice

重新启动,开发板/dev/下面创建了许多设备文件;

系统时钟:
将主机的时区文件拷贝到根文件系统:
Cp /etc/localtime ~/rootfs/etc/
rcS中添加: hwclock –hctosys,读取硬件时钟到系统;
命令hwclock –systohc可以将时间写入RTC;

网络配置:
如果是flash根文件系统启动,需要重新配置IP地址和激活网络接口,rcS中:
Ifup –a
并且添加一个配置文件:
Rootfs/etc/network/interfaces:
Auto lo
Iface lo inet loopback

Auto eth0
Iface eth0 inet static
Address 192.168.1.11
Netmask 255.255.255.0
Gateway 192.168.1.111

Httpd配置:
rcS中: httpd –h /srv/www
mkdir –p /srv/www/cgi-bin

Vivi的使用:
Para show
Para set ip “192.168.1.11”
Para set host “192.168.1.111”
Para set gw “192.168.1.11”
Para save

Part show
Part del usr
Part add root 0x00200000 0x03e00000 0

Load flash kernel t
$ atftp –l ./zImage –p 192.168.1.11
Load flash root t
$ atftp –l rootfs-basic.cramfs –p 192.168.1.11

Para set linux_cmd_line “noinitd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0”
Para save
Boot
(none)login:root

制作根文件系统:mkcramfs ~/rootfs rootfs.cramfs

NFS Root:
/etc/exports:
/home/USERNAME/rootfs *(rw,sync,no_root_squash)
采用rpcinfo –p查看服务是否启动,exportfs查看导出目录;
Para set linux_cmd_line “noinitrd root=/dev/nfs rw ip=192.168.1.11:192.168.1.111::255.255.255.0:::off nfsroot=/home/USERNAME/rootfs/ init=/linuxrc console=ttySAC0”
Para save

YAFFS Root:
Flash_eraseall /dev/mtd3
Mount –t yaffs /dev/mtdblck3 /mnt
从根文件系统中拷贝文件到flash分区:
Cp –a bin etc lib linuxrc opt sbin srv tmp usr /mnt/
Mkdir –p /mnt/proc /mnt/sys /mnt/dev /mnt/mnt /mnt/var/run
Mknod /mnt/dev/console –m 600 c 5 1
Mknod /mnt/dev/null -m 666 c 1 3
Umount mnt
Reboot

Para set linux_cmd_line “noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0”
Boot

编译内核:
解压内核源码包,进入目录;
修改Makefile,找到
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?=
改为
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-

~/linux-2.6.17.14$ patch –p1 < ../patch-2.6.17.14-board
Cp arch/arm/configs/smdk2410_defconfig .config
Make menuconfig
进行选项配置
然后,make,结果在arch/arm/boot/zImage;

交叉工具链编译:
Binutils-2.16.1.tar.bz2
Gcc-4.0.2.tar.bz2
Glibc-2.3.6.tar.bz2
Glibc-linuxthreads-2.3.6.tar.bz2
Linux-2.6.15.4.tar.bz2
Linux-libc-headers-2.6.12.0.tar.bz2

步骤:
根据目标平台配置内核源代码,生成内核头文件;
编译binutils;
编译器的自举(bootstrap),也就是先编译出gcc的部分功能;
编译glibc;
编译完整的gcc;

也可采用制作交叉编译器的脚本,执行该脚本会自动从官网下源代码,自动打补丁,然后自动完成编译步骤;
下载crosstool-0.43.tar.gz,解压后进入目标,修改demo-arm.sh脚本,采用
Eval `cat arm.dat gcc-4.0.2-glibc-2.3.6.dat` sh all.sh –notest
注意脚本开头
TARBALLS_DIR=$HOME/downloads 下载源码的位置
RESULT_TOP=/opt/crosstool 最后结果的位置
给/opt目录增加写权限,sudo chmod a+w /opt
修改arm.dat, TARGET=arm-linux
编译需要:patch,bison,flex等软件包;
Ubuntu的sh指向bash: sudo ln –sf bash sh
准备就绪后,在crosstool-0.43目录下运行demo-arm.sh开始编译,完成后可执行文件在:
/opt/crosstool/gcc-4.0.2-glibc-2.3.6/arm-linux/bin目录下;


阅读(954) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~