linux2.6.32内核移植,linux2.6.32内核移植到mini2440之supervivi
发布日期:2022-02-18 17:49:50 浏览次数:38 分类:技术文章

本文共 3526 字,大约阅读时间需要 11 分钟。

平台:Fedora9 + mini2440(64M Flash)

交叉编译工具:arm-linux-gcc 4.4.3

由于本文章主要是针对内核的移植,所以有关supervivi 和文件系统的制作在此不作讲解,supervivi采用mini2440官网上的最新supervivi,由于本人的开发板是64M的,最新的linux系统下的文件系统太大下载不了,依据官网上的资料对文件系统进行剪裁后的制作的,如果你的FLASH大于64M,那你就可以直接使用光盘中的制作好的文件系统,现在主要讲解一下linux移植。

1)下载linux内核源代码

获取内核的网址是:

可以看到你里面有各种版本的Linux,下载现在要移植的Linux-2.6.32版本,如果Linux可以上网的话,可以使用wget ,命令直接在当前的目录下进行下载(建议在windows系统下下载,然后通过共享复制到linux系统下)

2) 解压linux内核源代码

假设内核包已经存放在/opt/FriendlyARM/mini2440/目录下,终端下输入以下命令:

cd /opt/FriendlyARM/mini2440/   切换到内核存放的目录

tar xvzf linux-2.6.32.tar.gz    将内核解压到当前目录下

3) 修改源代码中的相应文件以适应mini2440

(1)修改Makefile文件

由于linux内核源代码默认的平台为X86平台,编译器默认的为gcc 所以要修改linux内核的默认平台为arm平台,编译器默认为arm-linux-,要修改这两项大约在文本的182行左右,下面两附图为修改前后的内容:

修改前:

6f7c9c2e755439ee238fe18cec7ac629.png

修改后:

a671b67d9a60de64dcd7ff434fd8409a.png

4) 测试linux内核能否顺利通过编译

4.1 make s3c2410_defconfig   //使用缺省的配置文件,也就是SMDK2440的缺省配置文件,完成此步后,将会在linux-2.6.32下产生一个.config文件,想要查看此文件是否存在,使用"ls -a"命令.

4.1 也可以将s3c2410_defconfig拷贝到linux-2.6.32目录下,首先切换目录到linux-2.6.32,然后执行以下命令:

cp ./arch/arm/configs/s3c2410_defconfig  .config

4.2 编译内核,编译的内核存放在/arch/arm/boot/目录下

make or make zImage or make bzImage  //编译的过程比较长,大约在二十分钟左右

(zImage和bzImage的区别:仅仅在X86平台下有区别,zImage只能编译小于512K的内核)

5) 修改机器码

很关键的一点是,在启动内核时,是根据bootloader传入的机器码(MACH_TYPE),来决定应启动那种目标平台,2.6.29以后的版本,友善之臂申请了字节的机器码1999,在文件opt/kernel/linux-2.6.32.2/arch/arm/tools/mach-types中.

b445d89f91380842f7259f93f3ad11cc.png

由于我们在此并没有使用mini2440的平台,使用的是SMDK2440的平台,但bootloader(supervivi)内的机器码为1999,所以这里我们可以将s3c2440的机器码改为1999.

118bc206f516b471c9702a644d1e4567.png

如果传入的机器码不对的话,启动的时候一般会出现下面的错误

Uncompressing

Linux................................................................................

done, booting

the kernel.

运行到这就停止了.

5)修改时钟源

在 mach-mini2440.c的第 160 行static void __init smdk2440_map_io(void)函数中,把其中的 16934400(代表原 SMDK2440 目标板上的晶振是 16.9344MHz)改为 mini2440 开发板上实际使用的 12000000(代表 mini2440 开发板上的晶振 12MHz,元器件标号为 X2),如果不更改的话,串口通信将会出现乱码.

更改后:

b88a90473d92e59e84b3edc477030960.png

更改前:

32ef8c1b391121dd728609d4e7f0ec4c.png

6) 修改NAND分区信息.

要让内核知道nand flash的分区信息,设置成跟bootloader一致. 在arch/arm/plat-s3c24xx/common-smdk.c中修改smdk_default_nand_part[],注意这个一定要跟bootloader的一致.

查看supervivi分区信息

(1) 输入q进入goto shell of vivi

Supervivi-> part show    显示以下分区表:

2e5d26f00622cd58f33a237396b1a9f9.png

(2) 按上面的信息修改分区表,修改后:

781a4aee146b03e1d55e8251018b79a9.png

7) 增加Yaffs2文件系统的支持

首先到网站下 载一个yaffs 文件系统的补丁,点击下图中的Download GNU tarball,下载.

c0c5f23319e7eccd7983532ad87f429d.png

得到补丁包后将其放到/opt/FrinedlyARM/mini2440/目录下,解压补丁,然后打上yaffs2 的补丁,方法如下:

tar xvfz cvs-root.tar.gz  (解压得到补丁目录cvs)

cd /opt/Frinedly/mini2440/cvs/yaffs2/  (进到yaffs2 的补丁目录下)

./patch-ker.sh c /opt/FriendlyARM/mini2440/linux-2.6.32(执行补丁脚本,打补丁到内核中,其中/opt/FriendlyARM/mini2440/linux-2.6.32为内核源码的地址)此时到内核源码的“fs/”目录下面将会看到新添加了一个名为“yaffs2/”的目录,同时fs/目录下面的Makefile 文件和Kconfig 文件也添加了yaffs2 的配置和编译条件。

8)配置内核

9.配置内核

调用自带的一个默认配置单, 该配置单在内核源码的 “arch/arm/configs/”目录下面,名为:“s3c2410_defconfig”,该配置文件里面选择了几乎所有的和S3C24XX 系列CPU 相关的 配置选项,我们完全可以在该配置单的基础上进行配置。

操作前提是切换到linux-2.6.32目录下进行: cp arch/arm/configs/s3c2410_defconfig .config  或者 make s3c2440_defconfig

make menuconfig

(1).General setup --->

[*] Configure standard kernel features (for small systems) --->

选上这项,否则文件系统中的一些选项不会出现

(2). System Type ---->

[*] S3C2410 DMA support [*] Support ARM920T processor

S3C2440 Machines --->

[*] SMDK2440

[*] SMDK2440 with S3C2440 CPU module

(3).[*] Enable loadable module support --->

[*] Module unloading

(4).Device Drivers --->

Memory Technology Device (MTD) support --->

[*] MTD partitioning support

NAND Device Support --->

NAND Flash support for S3C2410/S3C2440 SoC

[ ] S3C2410 NAND Hardware ECC //这个要去掉

[*] Network device support --->

[*] Ethernet (10 or 100Mbit) --->

DM9000 support

< > Real Time Clock --->

(5).File systems----->

Miscellaneous filesystems --->

YAFFS2 file system support

(6).kernel Features----->

[*]Use the ARM EABI to compile the Kernel

保存退出.10)编译内核

make zImage

编译完成后下载内核启动即可.

转载地址:https://blog.csdn.net/weixin_30942339/article/details/116604836 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:pe克隆linux系统下载,原来如此,Linux系统也有PE,不过它叫...
下一篇:linux网络凭据,在linux中存储凭据

发表评论

最新留言

不错!
[***.144.177.141]2024年04月05日 17时35分37秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

mac 系统新功能体验-根据时间变化的动态桌面背景,看壁纸演绎风景大片中的日出与日落 2019-04-27
ADB的安装和使用教程,小米手机连接adb实例演示 2019-04-27
windows 关闭粘滞键-解决Microsoft Remote Desktop输入自动变为快捷键问题 2019-04-27
测试工具 - Postman接口测试入门使用手册,Postman如何进行数据关联、自动更新cookies、简单编程 2019-04-27
PyQt5 技术篇-调用字体对话框(QFontDialog)获取字体,控件设置字体。 2019-04-27
Python 技术篇-将python项目打包成exe独立运行程序,pyinstaller库打包python代码实例演示 2019-04-27
Geany 权限问题:"Error opening file ... : permission denied.",原因及解决办法。 2019-04-27
CSDN博客主页增加赞赏码收钱模块,高端大气上档次! 2019-04-27
PyQt5 技术篇-调用文件对话框获取文件、文件夹路径。文件对话框返回选中的多个文件路径 2019-04-27
SSM 整合实现 增删改查、PageHelper 实现分页 2019-04-27
[增删改查] Lucene 5 索引 CRUD 2019-04-27
使用 SpringBoot 写增删改查接口 2019-04-27
初步使用 JFreeChart 生成报表与感受 2019-04-27
前端使用 BootStrap 写一些后台常用的界面 2019-04-27
使用 SpringBoot + Ckeditor 富文本编辑器、图片上传 2019-04-27
全栈式使用 SpringBoot + SpringSecurity 做登录认证 2019-04-27
[Java爬虫] 使用 Jsoup + HttpClient 爬取网页图片 2019-04-27
使用 Git 并借助 Eclipse + Coding 合作开发项目 2019-04-27
[Java爬虫] 使用 Xpath + HtmlUnit 爬取网页基本信息 2019-04-27
[人工智能] 使用百度 API 读取身份证照片的文字 2019-04-27