历史上的今天
返回首页

历史上的今天

今天是: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文件系统。


推荐阅读

史海拾趣

Axiomtek公司的发展小趣事

由于Axiomtek公司的发展涉及众多方面,并且具体的内部故事和详细事实可能不为公众所知,因此我无法直接提供5个具体的故事。但我可以根据公开资料,概括性地描述Axiomtek公司在电子行业中的发展历程,以及可能促成其发展的几个关键因素。

Axiomtek,也称为艾讯科技,自1990年在台湾成立以来,凭借其创新的设计、高质量的品质保证和高客户满意度的服务态度,逐步发展成为世界工业计算机领域的领先设计者和制造商。以下是根据公开资料概括的Axiomtek公司发展的几个关键阶段和因素:

一、创业初期:创新与技术的奠基

在创业初期,Axiomtek由一群充满创新精神和干劲的资深工程师创立。他们凭借对计算机技术的深刻理解和对工业需求的敏锐洞察,开始研发并生产一系列具有创新性的工业计算机产品。这些产品不仅满足了当时市场的迫切需求,还以其卓越的性能和稳定性赢得了客户的广泛认可。

二、研发与制造能力的不断提升

随着市场的不断扩大和竞争的加剧,Axiomtek意识到只有不断提升研发与制造能力,才能在激烈的市场竞争中立于不败之地。因此,公司投入大量资源用于研发新技术和新产品,并建立了完善的制造体系,以确保产品的高质量和稳定性。同时,Axiomtek还积极与全球知名的供应商和合作伙伴建立战略合作关系,共同推动工业计算机领域的技术进步和产业发展。

三、全球化布局与市场拓展

为了进一步扩大市场份额和提高品牌影响力,Axiomtek开始实施全球化战略。公司在全球多个国家和地区设立了分支机构,并建立了完善的销售和服务网络。通过这些分支机构,Axiomtek能够更好地了解当地市场需求和客户需求,提供更加贴近市场的产品和服务。同时,公司还积极参加各种国际展览和交流活动,与全球客户建立更加紧密的合作关系。

四、持续创新与技术升级

在快速发展的电子行业中,技术创新是保持竞争力的关键。Axiomtek始终坚持以创新为核心的发展战略,不断投入研发资源,推动技术升级和产品创新。公司不仅关注现有产品的优化和改进,还积极探索新的应用领域和市场机会,开发具有前瞻性的新产品和解决方案。这些创新成果不仅增强了Axiomtek的市场竞争力,还为公司的持续发展奠定了坚实的基础。

五、品质管理与客户服务的持续优化

品质和客户满意度一直是Axiomtek非常重视的方面。公司建立了严格的质量管理体系,从原材料采购到产品生产、测试和交付等各个环节都进行严格把控,确保产品的高品质。同时,Axiomtek还注重提升客户服务水平,通过提供专业的技术支持和售后服务,赢得了客户的信任和好评。这种以客户为中心的经营理念不仅提升了公司的品牌形象,还为公司赢得了更多的商业机会。

这些只是根据公开资料概括的Axiomtek公司发展的几个关键方面,具体的故事和细节可能需要根据公司内部的资料和档案进行进一步的挖掘和整理。但无论如何,Axiomtek作为电子行业中的佼佼者,其发展历程无疑是一个充满创新、挑战和机遇的传奇故事。

CMOSIS公司的发展小趣事

随着CMOS图像传感器在智能手机、安防监控、汽车等领域的广泛应用,CMOSIS公司看到了巨大的市场潜力。公司加大了市场拓展力度,不仅在国内市场取得了显著成绩,还积极开拓海外市场。同时,公司注重品牌建设,通过提升产品质量、加强售后服务等方式,树立了良好的企业形象和口碑。

對餘科技(DIOFIT)公司的发展小趣事

随着科技的不断发展,DIOFIT公司始终将技术创新作为发展的核心驱动力。他们不断投入研发资金,引进先进技术和人才,致力于研发具有自主知识产权的电子产品。在物联网、人工智能等前沿领域,DIOFIT公司取得了一系列突破性的成果,推出了一系列具有竞争力的产品,成为行业内的技术创新引领者。

Elpress AB公司的发展小趣事

Elpress AB始终将质量管理作为公司发展的核心。公司建立了完善的质量管理体系,从原材料采购到生产、检测、包装等各个环节都进行严格的质量控制。为了进一步提升产品质量和管理水平,Elpress AB于1992年获得了ISO 9001认证,成为电气连接领域的领军企业之一。此后,公司还通过了ISO 14001:2015环境管理体系认证,积极履行环保责任。

Alpha Industries公司的发展小趣事

Alpha Industries一直致力于面料的研发与创新。近年来,公司借助电子技术的支持,成功研发出一种智能面料。这种面料具有自动调节温度、防水透气等功能,为士兵提供更为舒适的穿着体验。智能面料的研发不仅提升了Alpha Industries产品的科技含量,也进一步巩固了其在军事服装领域的领先地位。

Aavid Niagra公司的发展小趣事

近年来,电子行业正经历着深刻的变革,新兴技术的不断涌现对传统散热技术提出了严峻挑战。Aavid Niagra公司面对这一变革,积极调整战略方向,加大在新兴技术领域的研究力度。通过与高校、研究机构的合作,公司成功研发出了一系列适应新兴技术需求的散热产品,成功应对了行业变革带来的挑战。

问答坊 | AI 解惑

信号发生器资料

信号发生器资料,我做的是侯找的资料,放一起分享了 朋友们可能用得着...............…

查看全部问答>

NEC单片机的11个例程

本帖最后由 paulhyde 于 2014-9-15 03:45 编辑 文件夹中一共11个程序,有很详细的说明,希望对初学NEC单片机和想学习NEC单片机的人有帮助,由于本人学习NEC单片机时间比较短,程序中有错误的还希望大家指点,单片机是0537DA  …

查看全部问答>

数字示波器

各位大虾:我们要选一款数字示波器,要求是能够进行远程访问,用于嵌入式系统开发的,不知道选择什么样的能符合要求?希望有用过的虾们给个提示,谢谢!!!…

查看全部问答>

江湖救急--WDK6000开发的驱动XP下装不上

请教各位大侠。 我在wdk6000下基于KMDF开发了一个PCI设备的驱动,在Vista下能正常的安装和使用。按照微软提供的文档,Build Environments选为\"Windows XP\"后编译的驱动在XP下安装却报错:Windows无法加载这个硬件的设备驱动程序,驱动程序可能已 ...…

查看全部问答>

学习STM8的好文章(转)

第一节: 心情和时钟说实话我能够使用的单片机不多,我总是以为无论什么单片机都能开发出好的产品。前些年用51,总是向各位大大学习,无休止的索取,在网上狂览一通。心里感激的同时也想奉献一些,可是我会什么?后来使用avr(公司要求)还是向大大 ...…

查看全部问答>

PIC单片机LCD驱动问题

PIC16lf1937使用3V电源,Lcd脚的驱动能力的多大?比如,我的LCD玻璃片额定电压应该做多少(1/3偏置,1/4占空),望高手给个建议。谢谢!…

查看全部问答>

基于SN65HVD22的485通讯电路

附近是基于SN65HVD22的485通讯电路该485芯片内部自带静电保护功能,传输距离可达1200米,支持256个结点,500K的传输速率由于条件限制,实际测试只是在500米左右16个结点9600~115200波特率情况下测试,完全能够满足要求附件电路中添加了6N137的光电 ...…

查看全部问答>

弄了块stm32f407的板子,悲催的发现找不到驱动,连上电脑说驱动没安装

只想问下,哪里可以下载它的驱动?我自己下了个PL2303但是还是不行…

查看全部问答>

如何利用TIM1输出6路互补的PWM,控制电机

各位同仁们,本人刚接触电机  现在手上有一款开发板 还有个电机  想利用TIM1输出6路互补PWM,来控制电机 不知道如何下手,电机是带HALL传感器的 已经知道HALL的正转和反转的顺序  就是不知道如何让电机转起来 TIM1_C ...…

查看全部问答>