Linux内核及文件系统移植

嵌入式系统包含硬件子系统与软件子系统,其中软件子系统大致可分为:bootloader、Linux内核、文件系统与应用开发,这四个组成部分中前三者构建成嵌入式应用功能的基础运行环境,是进行嵌入式产品项目开发前期就需要敲定的配置环境,非常重要与关键。本课程主要对第三部分嵌入式文件系统的构建与移植进行介绍,讲解如何选择、配置、移植与制作一个可用的文件系统及其镜像,以及怎样配合Linux内核的配置调整来应用生成的文件系统,进而掌握构建完整的嵌入式软件子系统应用开发环境。

开发移植环境:虚拟机Ubuntu 12.04 + FriendlyARM Smart210SDK + Windows 7 Ultimate

Lesson 1. Linux内核启动参数介绍与设置

引导:
软件子系统各组成部分之间的层次与关联,怎样相互识别、配置与加载?

一、系统启动流程
bootloader(uboot) ———— Linux Kernel(uImage) ———— Rootfs(Init) ———— Applications

二、启动环境配置
uboot环境变量: printenv setenv saveenv tftpboot nand read/write …
baudrate 115200
bootdelay
bootcmd boot bootd运行bootcmd变量指定的命令进行启动
ipaddr, serverip, ethaddr,gatewayip
bootargs

内核启动参数:bootargs '<name>=<value> ...'
bootargs=root=/dev/nfs nfsroot=192.168.10.7:/home/hong/nfsroot ip=192.168.10.11 init=/linuxrc console=ttySAC0,115200

	root, rootfstype, nfsroot
		root=/dev/nfs nfsroot=nfsserver:path
		root=/dev/mtdblock2
		rootfstype=jffs2/yaffs2/squashfs/ubifs/...
	mtdparts: mtdparts=mtd-id:<size1>@<offset1>(<name1>),<size2>@<offset2>(<name2>)
		mtdparts=s5pv210-nand:1M(boot),5M(kernel),80M(rootfs),426M(usrfs)
		要想这个参数起作用,内核中的mtd驱动必须要支持,即内核配置时需要选上
		Device Drivers  ---> Memory Technology Device (MTD) support  ---> Command line partition table parsing
	ip: nfs必须进行设置
		 ip=ip addr
		 ip=ip addr:server ip addr:gateway:netmask::which netcard:off
	init, console
	mem 限制linux内核的使用内存 mem=128M

三、启动参数设置
setenv bootargs ‘root=/dev/nfs nfsroot=192.168.10.7:/home/hong/nfsroot ip=192.168.10.11 init=/linuxrc console=ttySAC0,115200’
setenv bootcmd ‘tftpboot 20008000 tiny_uImage;bootm 20008000’

总结:
1. 收集信息:flash类型与分区(nand/nor/spi.etc), 内存大小, 根文件系统类型,网络参数等(参考SDK开发手册)
2. 配置参数:setenv bootargs ‘…’;saveenv;
3. 测试参数:确保内核镜像可以成功加载,必不可少的步骤

10-05 18:38