Linux内核移植:linu-4.3.2
一:内核的启动流程分析
二:配置内核机器
a: 下载linux-3.4.2.tar.bz2
b: 解压 tar xjf linux-3.4.2.tar.bz2
c: 修改Makefile :viMakefile 搜索:/ARCH
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-
d:找到默认配置 :find -name “*defconfig”
e:进入我们需要的架构里面找到我们对应的单板配置
cd arch/arm/configs
ls *2440*
make s3c2410_defconfig 生成.config
f:烧到板子上面
tftp 32000000 uImage
bootm 320000000
出现乱码证明机器ID不对
g:查看u-boot源码设置ID
uboot的默认MACH ID:
gd->bd->bi_arch_number = MACH_TYPE_SMDK2410; // 193
如果s =getenv("machid");成功,则使用它,可以通过u-boot设置machid
否则使用默认的
1:查看这两种单板的初始化函数mach-smdk2440.c和mach-mini2440.c,并修改单板所用的晶振值: 12M
vi arch\arm\mach-s3c24xx\mach-smdk2440.c
:165 在165行修改如下
s3c24xx_init_clocks(16934400);
改为
s3c24xx_init_clocks(12000000);
2: set bootargs console=ttySAC0,115200 root=/dev/mtdblock3
3 : 设置machid
set machid16a // smdk2440 mach-smdk2440.c
或
set machid7CF // mini2440 mach-mini2440.c
4:重新配置并编译内核
make s3c2410_defconfig 或 makemini2440_defconfig
make uImage
5 :烧写内核
tftp 32000000 uImage
bootm 30000000
可以看到进入了内核
h:查看支持多少种单板支持
cd arch/arm/
find -name *mach*.o*
三:修改内核分区表
查看内核答应信息可以看到挂在文件系统不成功,分区表和我们u-boot的分区表不一致
修改分区表
怎样修改分区表????
a: 查找这个分区名
grep “\"Boot\ Agent\"” * -Nr
b:分区表在这个文件中:
linux-3.4.2\arch\arm\mach-s3c24xx\Common-smdk.c
在这个文件的113行修改为如下图
d: 编译并下载 :可从内核的打印信息得知分区表出来了
四:加入文件系统
Linux-3.4.2默认不支持yaffs文件系统,先用jffs2文件系统
a: 下载jffs2文件系统并设置环境变量
tftp 30000000 fs_mini_mdev.jffs2
nand erase.part rootfs
nand write.jffs2 30000000 260000 $filesize (filesize根据u-boot的版本)
set bootargs console=ttySAC0,115200 root=/dev/mtdblock3rootfstype=jffs2
b:烧写内核
tftp 32000000 uImage &&bootm 32000000
c:出现问题
五:创建新的文件系统:jffs2
a:tar xjf busybox-1.20.0.tar.bz2
cd busybox-1.20
make menuconfig
选择交叉编译工具链
-> BusyboxSettings
Buildoptions
Crosscompiler prefix
设置成arm-linux-
最后退出一步make
b:
1:vi README
2: 安装busybox-1.20.0 :make install CONFIG_PREFIX=/work/nfs_root/fs_mini_mdev_new
3:安装库看服务器上面的交叉编译连库
echo $PATH
/usr/local/arm/4.3.2/bin/
cd /usr/local/arm/4.3.2
find -neme lib(找到库文件)
4:安装库文件
cd ./arm-none-linux-gnueabi/libc/armv4t/lib
在这个文件里面建立一个文件夹lib
/work/nfs_root/fs_mini_mdev_new$ mkdir lib
在这个文件里面建立一个文件夹usr/lib
mkdir /work/nfs_root/fs_mini_mdev_new/usr/lib-p
把工具链里面的库全部拷贝到/work/nfs_root/fs_mini_mdev_new/lib目录下
cp /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib/*so* /work/nfs_root/fs_mini_mdev_new/lib -d
把工具链里面的库全部拷贝到/work/nfs_root/fs_mini_mdev_new/usr/lib目录下
cp /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/lib/*so* /work/nfs_root/fs_mini_mdev_new/usr/lib –d
5: 从以前的文件系统拷贝etc目录
/work/nfs_root/fs_mini_mdev$ cp etc/ /work/nfs_root/fs_mini_mdev_new/ -rf
viinittab 修改如下
console::askfirst:-/bin/sh
6:安装dev目录
mkdir dev
ls -l /dev/console /dev/null
crw------- 1 root root 5, 1 2014-10-27 19:41 /dev/console
crwxrwxrwx 1 root root 1, 3 2014-10-22 19:01 /dev/null
sudo mknod dev/console c 5 1
sudo mknod dev/null c 1 3
7:创建其他目录
mkdir proctmp mnt sys root
8:生成jffs2文件系统
mkfs.jffs2 -n -s 2048 -e128KiB -d fs_mini_mdev_new -o fs_mini_mdev_new.jffs2
9:烧写
tftp 30000000 fs_mini_mdev_new.jffs2
nand erase.part rootfs
nand write.jffs2 30000000 260000 $filesize
set bootargs console=ttySAC0,115200 root=/dev/mtdblock3rootfstype=jffs2
tftp 32000000 uImage&& bootm 32000000
10:. 重新配置内核支持EAB
六:创建yaffs文件系统
a:下载yaffs2文件系统的源码
b:viREADME-LINUX
c: yaffs2源码打补丁到linux内核中去
./patch-ker.sh c m /work/system/linux-3.4.2
d: 配置内核支持yaffs2文件系统
makemenuconfig
-> File systems
-> Miscellaneous filesystems (MISC_FILESYSTEMS [=y])
-> yaffs2 file system support (YAFFS_FS [=n]) 把这个文件选中
-> 512 byte / page devices (YAFFS_YAFFS1 [=n])
-> Use older-style on-NAND data format with pageStatus byte
e:修改内核源码
把yaffs2添加到sourceinsght 里面去
makeuImage 有很多错误
修改错误发现结构体里面的定义和yaffs文件中的不一样
f:制作yaffs2文件系统
cd /work/nfs_root/
mkyaffs2image fs_mini_mdev_new fs_mini_mdev_new.yaffs2
g:烧写内核和文件系统
tftp 30000000 fs_mini_mdev_new.yaffs2
nand erase.part rootfs
nand write.jffs2 30000000 260000 $filesize
set bootargs console=ttySAC0,115200 root=/dev/mtdblock3rootfstype=jffs2
tftp 32000000 uImage&& bootm 32000000
nand_flash: 按页来划分 一页2048byte 还有校验oob但是没有包括在nandflash的空间中
nandflash有位反转 引入了oob
下面是读写nandflash的操作,yaffs文件系统
七:裁剪内核
1:修改支持的单板
make menconfig
找到编译进内核的单板
System Type
SAMSUNG S3C24XX SoCs Support
设置成如下
2:File systems
修改成如图 :嵌入式不需要支持这种文件系统
3: 文件系统裁剪键盘鼠标光盘
4: 接下来查看.config修改menuconfig