历史上的今天
今天是:2025年11月17日(星期一)
2022年11月17日 | S3C2440移植linux3.4.2内核之修改分区以及制作根文件系统
2022-11-17 来源:zhihu
上一节S3C2440移植linux3.4.2内核之内核框架介绍及简单修改我们简单配置了内核,这节来根据继续修改内核。
启动内核
内核启动的打印信息如下图所示

可以看到内核有8个分区,而我们的uboot只有4个分区。
0x00000000-0x00040000 : "bootloader" //存放uboot
0x00040000-0x00060000 : "params" //存放环境变量
0x00060000-0x00260000 : "kernel" //存放内核
0x00260000-0x10000000 : "rootfs" //存放文件系统
所以接下来我们来修改内核分区
修改内核分区
在si里搜索上图出现的”S3C2410 flash partition”字段,找到位于common-smdk.c中,里面有个数组smdk_default_nand_part[],内容如下所示:

修改smdk_default_nand_part[]数组(位于arch/arm/mach-s3c24xx/common-smdk.c) 修改为:
static struct mtd_partition smdk_default_nand_part[] = {
[0] = {
.name = "bootloader", //0x00000000-0x00040000
.size = SZ_256K,
.offset = 0,
},
[1] = {
.name = "params", //0x00040000-0x00060000
.offset = MTDPART_OFS_APPEND,
.size = SZ_128K,
},
[2] = {
.name = "kernel", //0x00060000-0x00260000
.offset = MTDPART_OFS_APPEND,
.size = SZ_2M,
},
[3] = {
.name = "rootfs", //0x00260000-0x10000000
.offset = MTDPART_OFS_APPEND,
.size = MTDPART_SIZ_FULL,
}
};
上面部分宏的定义,如下所示: MTDPART_OFS_RETAIN: 填在offset里,表示先后保留多少size空间大小 MTDPART_OFS_NXTBLK: 填在offset里,表示从下一个块开始 MTDPART_OFS_APPEND: 填在offset里,表示该分区位置附加在上个分区结束的地址上 MTDPART_SIZ_FULL: 填在size里,表示剩下的内存size都归于该分区 若需要mini2440的机器ID,则还需要修改mini2440单板对应的mach-mini2440.c 因为该单板的mtd分区也不对,将里面的mini2440_default_nand_part[]内容改为和上面一样,拷贝文件到ubuntu重新编译下载内核

烧写yaffs2文件系统
烧写 /work/nfs_root fs_mini_mdev.yaffs2文件系统
nfs 30000000 192.168.1.30:/work/nfs_root/fs_mini_mdev.yaffs2
nand erase.part rootfs
nand write.yaffs 30000000 260000 889bc0
启动文件系统
set bootargs console=ttySAC0,115200 root=/dev/mtdblock3 rootfstype=yaffs2
nfs 32000000 192.168.1.30:/work/nfs_root/uImage_new
bootm 32000000

打印信息表示不支持该内核不支持yaffs文件系统,然后尝试使用ext3 ext2 cramfs vfat msdos iso9660等来挂载
烧写jffs2文件系统
在.config中搜索JFFS2,发现支持JFFS2文件系统

下载文件系统
nfs 30000000 192.168.1.30:/work/nfs_root/fs_mini_mdev.jffs2
nand erase.part rootfs
nand write.jffs2 30000000 260000 $filesize
set bootargs console=ttySAC0,115200 root=/dev/mtdblock3 rootfstype=jffs2
启动后如图所示

表示jffs2已挂载,但是找不到init程序,因为这个文件系统的glibc库是交叉编译3.4版本的,由于3.4内核的交叉编译是4.3版本,所以不支持,接下来我们便重新制作文件系统
构造根文件系统
详细步骤可参考构建根文件系统
安装busybox
首先编译安装busybox(参考以前的busybox安装章节)进入
https://busybox.net/下载busybox 1.20.0
tar -xjf busybox-1.20.0.tar.bz2
cd busybox-1.20.0
make menuconfig //设置交叉编译前缀
进入Busybox Settings --->Build Options --->() Cross Compiler prefix
在弹出的对话框里面写入:arm-linux-
make //编译
mkdir /work/nfs_root/fs_mini_mdev_new //创建要安装的文件系统目录
make install CONFIG_PREFIX=/work/nfs_root/fs_mini_mdev_new //指定安装位置
安装完成后有了各种目录
![]()
安装glibc库
输入$PATH找到交叉编译位于/work/tools/arm-linux-gcc-4.3.2/usr/local/arm/4.3.2位置, 通过find -name lib,找到有以下几个lib

由于ARM9属于ARMv4T架构,所以拷贝上面第三个第四个lib到fs_mini_mdev_new里
mkdir /work/nfs_root/fs_mini_mdev_new/lib
mkdir /work/nfs_root/fs_mini_mdev_new/usr/lib -p
cp arm-none-linux-gnueabi/libc/armv4t/usr/lib/*.so* /work/nfs_root/fs_mini_mdev_new/usr/lib -d /* -d:保持链接 */
cp arm-none-linux-gnueabi/libc/armv4t/lib/*.so* /work/nfs_root/fs_mini_mdev_new/lib -d
构造etc目录
cp 原来的etc fs_mini_mdev_new -rf
构造其它文件/目录
1)创建终端文件(dev/console和dev/null)
sudo mknod –m 660 dev/console c 5 1
sudo mknod –m 660 dev/null c 1 3
2)创建其它目录
mkdir mnt tmp root proc sys root
制作jffs2映像文件
由于mkfs.jffs2工具之前已经安装好了,所以直接使用mkfs.jffs2命令:
cd /work/nfs_root/ //返回到上个目录
mkfs.jffs2 -n -s 2048 -e 128KiB -d fs_mini_mdev_new -o fs_mini_mdev_new.jffs2
//-n:表示每块不添加清除标记,-s:NAND的每页为2k,-e: NAND的每块为128kb
//-d fs_mini_mdev_new:表示要制作的根文件系统文件
//-o fs_mini_mdev_new.jffs2:表示生成的映像文件
烧写jffs2,启动内核
nfs 30000000 192.168.2.106:/work/nfs_root/fs_mini_mdev_new.jffs2
nand erase.part rootfs
nand write.jffs2 30000000 260000 $filesize
set bootargs console=ttySAC0,115200 root=/dev/mtdblock3 rootfstype=jffs2
nfs 32000000 192.168.2.106:/work/nfs_root/uImage_new
bootm 32000000
启动内核 打印如下图所示:

配置EABI
进入si,搜索exitcode,找到0x00000004对应的宏定义是SIGILL,表示非法指令,是因为arm-linux-gcc-4.3.2是使用的EABI接口,内核由于未配置,所以出现非法 配置内核支持EABI 输入make menuconfig,搜索EABI,找到位于:
kernel feature->
[*] Use the ARM EABI to compile the kernel
make uImage
重新编译烧写内核就没问题了。 下一节S3C2440移植linux3.4.2内核之支持YAFFS文件系统我们将修改内核支持yaffs文件系统。
上一篇:JZ2440 串口裸机编程
史海拾趣
|
本帖最后由 paulhyde 于 2014-9-15 03:45 编辑 文件夹中一共11个程序,有很详细的说明,希望对初学NEC单片机和想学习NEC单片机的人有帮助,由于本人学习NEC单片机时间比较短,程序中有错误的还希望大家指点,单片机是0537DA … 查看全部问答> |
|
请教各位大侠。 我在wdk6000下基于KMDF开发了一个PCI设备的驱动,在Vista下能正常的安装和使用。按照微软提供的文档,Build Environments选为\"Windows XP\"后编译的驱动在XP下安装却报错:Windows无法加载这个硬件的设备驱动程序,驱动程序可能已 ...… 查看全部问答> |
|
第一节: 心情和时钟说实话我能够使用的单片机不多,我总是以为无论什么单片机都能开发出好的产品。前些年用51,总是向各位大大学习,无休止的索取,在网上狂览一通。心里感激的同时也想奉献一些,可是我会什么?后来使用avr(公司要求)还是向大大 ...… 查看全部问答> |
|
附近是基于SN65HVD22的485通讯电路该485芯片内部自带静电保护功能,传输距离可达1200米,支持256个结点,500K的传输速率由于条件限制,实际测试只是在500米左右16个结点9600~115200波特率情况下测试,完全能够满足要求附件电路中添加了6N137的光电 ...… 查看全部问答> |
|
各位同仁们,本人刚接触电机 现在手上有一款开发板 还有个电机 想利用TIM1输出6路互补PWM,来控制电机 不知道如何下手,电机是带HALL传感器的 已经知道HALL的正转和反转的顺序 就是不知道如何让电机转起来 TIM1_C ...… 查看全部问答> |




