根文件系统制作1
动态链接库加载器ld-2.3.6.so、ld-linux.so.2
ld-linux:动态链接库,必需
libc: 标准c函数库,必需
libm: 数学库,一般需要
libdl: 用于动态装载共享库,较少用到
libcrypt: 加密附加库,需要认证的程序用到,较少用
libpthread: POSIX线程库,一般需要
如果需要某个函数库,我们可以将这些库和对应的符号链接拷到目标根文件系统的/lib目录下
BusyboxSettings --->BuildOptions --->
[*] BuildBusyBox as a static binary (no shared libs)
[ ] Force NOMMU build (NEW)
[ ] Build with Large File Support (foraccessing files > 2 GB)
(目录树的绝对路径
() Additional CFLAGS (NEW)
Device Drivers-->Block devices-->选择 RAM block device support 项
(16384) Default RAM disk size (kbytes)
注:ramdisk大小的设置根据你bootargs传的参数而定,不是唯一的,看你自己想把ramdisk文件系统做的多大了。(16M)
2,添加内核对nfs的支持:在内核中为256M的nandflash进行分区,修改文件arch/arm/plat-s3c24xx/common-smdk.c中的static struct mtd_partition smdk_default_nand_part[]
注:因为ramdisk只是一个块设备,只有将其格式化为特定的文件系统后才能使用,我们将其格式化ext2格式
gzip ramdisk
du -h ramdisk.gz
File systems --->Miscellaneous filesystems --->
<*> Journalling Flash File System v2 (JFFS2) support
(0) JFFS2 debugging verbosity (0 = quiet, 2 = noisy)
[*] JFFS2 write-buffering support
[ ] JFFS2 summary support (EXPERIMENTAL)
[ ] JFFS2 XATTR support (EXPERIMENTAL)
[ ] Advanced compression options for JFFS2
2,制作mkfs.jffs2和mkfs.ubifs
mkdir mtd-utiles
cd mtd-utiles/
sh build.sh
cd mtd-utils-1.4.9(在mtd-utils-1.4.9中)
sudo cp mkfs.jffs2 /usr/local/bin/
sudo mkfs.jffs2 -n -s 2048 -e 128KiB -d rootfs -o rootfs.jffs2 --pad=0x1400000
各参数的意义:
(1)-r :指定根文件系统目录.
(2)-o : 指定输出的根文件系统名.
(3)-s : 指定flash每一页的大小;
(4)-e : 指定flash的檫除块的大小,預設是64KB.
(5)-d: 指定根目录树的路径
4,mtd-utils
六,ubifs文件系统制作
1,打开配置菜单
Device Drivers ---> <*> Memory Technology Device (MTD) support ---> <*> Enable UBI - Unsorted block images --->
(4096) UBI wear-leveling threshold (NEW)
(1) Percentage of reserved eraseblocks for bad eraseblocks handling (NEW)
< > MTD devices emulation driver (gluebi) (NEW)
[ ] UBI debugging (NEW)
File systems --->[*] Miscellaneous filesystems --->
<*> UBIFS file system support
[*] Extended attributes support
[*] Advanced compression options
[*] LZO compression support (NEW)
[*] ZLIB compression support (NEW)
[ ] Enable debugging support (NEW)Networking --->Networking options --->[*] IP: kernel level autoconfiguration
File systems --->Network File Systems --->
<*> NFS file system support [*] Root file system on NFS
uboot环境变量的设置
bootargs_initramfs=console=ttyS0,115200 mem=64M init=/linuxrc rw loglevel=7'
(注:initramfs编译进linux内核中所以不需要指定root 和initrd)
bootargs_ramdisk=console=ttyS0,115200 mem=64M initrd=0x30800000,16M root=/dev/ram0 rw loglevel=7
bootargs_cramfs=noinitrd root=/dev/mtdblock3 rootfstype=cramfs init=/linuxrc console=ttyS0,115200
bootargs_jffs2=noinitrd root=/dev/mtdblock4 rootfstype=jffs2 init=/linuxrc console=ttyS0,115200
bootargs_ubifs=console=ttyS0,115200 mem=64M ubi.mtd=6 root=ubi0:rootfs rootwait rootfstype=ubifs rw
bootcmd_ramdisk=nand read 30008000 100000 400000;nand read 30800000 500000 500000;bootm 30008000
(注:ramdisk 是加载到内存的3080000地址上运行的)
bootcmd_initramdisk=nand read 30008000 100000 800000;bootm 30008000
bootcmd_rootfs=nand read 30008000 100000 400000;bootm 30008000
将内核映像和文件系统映像下载并烧入nandflash
bkr=tftp 30008000 linuxrom-s3c2440.bin;nand erase 100000 800000;nand write 30008000 100000 800000
bramdiskfs=tftp 30008000 ramdisk.gz;nand erase 500000 a00000;nand write 30008000 500000 500000
bcramfs=tftp 30800000 rootfs.cramfs;nand erase f00000 600000;nand write 30800000 f00000 600000
bjffs2=tftp 30008000 rootfs.jffs2;nand erase 1e00000 1400000;nand write.jffs2 30008000 1e00000 1400000
内核分区信息
0x000000000000-0x000000100000 : "mtdblock0 u-boot 1MB"
0x000000100000-0x000000500000 : "mtdblock1 kernel 4MB"
0x000000500000-0x000000f00000 : "mtdblock2 ramdisk 10MB"
0x000000f00000-0x000001e00000 : "mtdblock3 cramfs 15MB"
0x000001e00000-0x000004600000 : "mtdblock4 jffs2 40MB"
0x000004600000-0x000006e00000 : "mtdblock5 yaffs2 40MB"
0x000006e00000-0x000009600000 : "mtdblock6 ubifs 40MB"
0x000009600000-0x000009700000 : "mtdblock7 info 1MB"
0x000009700000-0x00000bf00000 : "mtdblock8 apps 40MB"
0x00000bf00000-0x00000e700000 : "mtdblock9 data 40MB"
0x00000e700000-0x000010000000 : "mtdblock10 backup 25MB"
bootargs参数传递 :http://blog.csdn.net/shlpyy/article/details/5646429
bootargs_ramdisk=console=ttyS0,115200 mem=64M initrd=0x30800000,16M root=/dev/ram0 rw loglevel=7
console = ttyS0 //指定了串口用串口0设备作为内核启动后首选的控制台
115200 //波特率设置
mem=64M //板子内存大小为64M
initrd=0x30800000 //指定ramdisk文件系统的在内存中的起始加载地址
16M //指定ramdisk文件系统的大小,也就是这个大小,决定内核配置设置
root=/dev/ram0 //指定文件系统挂载到哪个设备或在flash分区中的位置
rw //读写权限
loglevel=7 //七级打印
init=/linuxrc //指定了Linux内核启动完毕后调用的第一个、也是唯一的一个用户态进程
注:linuxrc是一个程序,执行流程为设置信号处理函数. 初始化控制台,解析inittab文件.
rootfstype=jffs2
错误记录
1,内核打印信息显示
rcS: applet not found
rcS脚本写错了:# !/bin/sh (#和!之间多加了一个空格)
导致rcS脚本不能执行,dm9000不能启动,要手动执行S01_network脚本才能启动dm9000