【原创】嵌入式LINUX内核移植(mini2440)----09.02 - Go语言中文社区

【原创】嵌入式LINUX内核移植(mini2440)----09.02


     首先要申明下的,虽说原创,但是整个过程都是辛苦的查阅网络资料一点一点的完成。同时掺杂自己的心得。所以还是希望有些用处,同时也是自己整理一下思路,加深下记忆。

MINI2440的开发板买了很久了。年末的一段时间感觉都点堕落了,春节嘛。然后工作中又掺杂好多事情。毕竟我的工作不是做这些。这些都是自己的兴趣一直鼓动着我让我前进。我的工作是开发遥控器程序,由于在这里已经有快3年了。单片机的开发可以说还是比较简单的。所以个人一直都觉得应该向ARM发展

拿了板子很早就把资料看了遍。板子的开发资料还是很全的。有需要的我可以共享下。

好了,切入正题。

准备:

linux的内核一直在不断更新,目前我知道的是2.6.26.

GCC我之前的是3.4.1,然后我也升级到了4.1.1 这里是交叉编译用的。

开发板为S3C2440的MINI2440,友善之臂的产品。

虚拟环境为VMware

1.

好了,准备好了这些就可以开始了

解压好2.6.26 其实任意地方都行 这里无所谓,


然后立马接着打开这里的makefile文件 必须修改编译器

#ARCH ?= $(SUBARCH)
#CROSS_COMPILE ?=
修改为

ARCH ?= arm
CROSS_COMPILE ?= /usr/local/4.1.1/bin/arm-xscale-linux-gnu-

路径是你自己的GCC的路径。

2.

这样就可以用自己的GCC生成一个默认配置文件

# make s3c2410_defconfig

3.

增加yaffs2系统支持和devfs文件系统支持

yaffs2的加入则必须从以前的内核里拷出/fs/yaffs2文件夹放入新的内核的同样位置

然后修改/fs/Kconfig文件

menu "Miscellaneous filesystems" 后面添加

# Patched by YAFFS
source "fs/yaffs2/Kconfig" 整合yaffs系统

menu "Pseudo filesystems" 后面加入原内核所有的DEVFS的3项,具体我就不贴了,旧内核文件应该都有的。

4.

可以修改晶振了,否则编译后串口显示会有乱码

arch/arm/mach-s3c2440/mach-smdk2440.c 文件中的 s3c24xx_init_clocks(16934400);

修改为12M

5.

然后就要分区了。

我的分区是3个这点也是完全摘自旧内核分区,其实也是为了避免错误的产生

当然新的内核的分区文件发生了改变 现在生效的是arch/arm/plat-s3c24xx/common-smdk.c

打开此文件 找到

static struct mtd_partition smdk_default_nand_part[]

全部替代掉。

static struct mtd_partition smdk_default_nand_part[] = {
[0] = {
.name = "vivi",
.size = 0x00020000,
.offset = 0X00000000,
},
[1] = {
.name = "kernel",
.offset = 0x00050000,
.size = 0x00200000,
},
[2] = {
.name = "root",
.offset =0x00250000,
.size =0x03dac000,
}
};


显然这样就只有3个分区内核启动后是可以看得到的 。

6.

修改cpu ID,不修改将会出现无法进入内核由于CPU mach_type 不对应找不到对应的CPU。

arch/arm/tools/mach-types 这个文件打开修改对应CPU 的ID

比如我修改 S3C2410 对应为 782(我的VIVI的ID)。这样就可以找到S3C2410了

当然有人说直接修改VIVI ,我要说VIVI 没有源码(SUPERVIVI,友善的)。软件式的修改每次重新烧写到NANDflash都得再来一次修改 麻烦

7.

基本差不多了 ,还有一个校验的问题

drivers/mtd/nand/s3c2410.c
NAND_ECC_SOFT;----》NAND_ECC_NONE;

8.

修改完成,可以进行内核配置了。

MAKE menuconfig


如果仅仅是测试移植的话 很多时候很多东西可以不用管

Boot options 要改 root=/dev/mtdblock2 rootfstype=cramfs init=/linuxrc console=ttySAC1,115200 devfs=mount mem=64

System Type 要选上 2410

yaffs 文件系统添加上 虽然我们启动方式中文件系统是cramfs 但是用yaffs时可以用到

devfs 文件系统也得加上

9.

配置都完成了 保存退出 编译内核了 不出意外 2分钟完成

可以烧入 VIVI zImage filesystem 测试你的内核了

+---------------------------------------------+
| S3C2440A USB Downloader ver R0.03 2004 Jan |
+---------------------------------------------+
USB: IN_ENDPOINT:1 OUT_ENDPOINT:3
FORMAT: <ADDR(DATA):4>+<SIZE(n+10):4>+<DATA:n>+<CS:2>
NOTE: Power off/on or press the reset button for 1 sec
in order to get a valid USB device address.

NAND device: Manufacture ID: 0xec, Chip ID: 0x76 (Samsung K9D1208V0M)
Could not found stored vivi parameters. Use default vivi parameters.
Press Return to start the LINUX/Wince now, any other key for vivi
Copy linux kernel from 0x00050000 to 0x30008000, size = 0x00200000 ... done
zImage magic = 0x016f2818
Setup linux parameters at 0x30000100
linux command line is: "noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySA
C0"
MACH_TYPE = 782
NOW, Booting Linux......
Uncompressing Linux.............................................................
......................................... done, booting the kernel.
Linux version 2.6.26 (root@lynn-desktop) (gcc version 4.1.1) #6 Tue Jan 13 16:58
:30 CST 2009
CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177
Machine: SMDK2410
ATAG_INITRD is deprecated; please update your bootloader.
Memory policy: ECC disabled, Data cache writeback
CPU S3C2440A (id 0x32440001)
S3C244X: core 405.000 MHz, memory 101.250 MHz, peripheral 50.625 MHz
S3C24XX Clocks, (c) 2004 Simtec Electronics
CLOCK: Slow mode (1.500 MHz), fast, MPLL on, UPLL on

Creating 3 MTD partitions on "NAND 64MiB 3,3V 8-bit":
0x00000000-0x00020000 : "vivi"
0x00050000-0x00250000 : "kernel"
0x00250000-0x03ffc000 : "root"

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/lynnlase/article/details/10209151
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-05-30 09:29:56
  • 阅读 ( 959 )
  • 分类:Linux

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢