Linux2.6.24内核移植

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

Linux2.6.24移植到utu2440

一、准备工作

安装libcurses5-dev否则make menuconfig出错

# sudo apt-get install libcurses5-dev build-essential

下载Linux内核源码,大名鼎鼎源码网站http://www.kernel.org/pub/linux/kernel/v2.6

# cd /home/liao/image

# tar –zxvf linux2.6.24.tar.bz2

# cd linux-2.6.24

下载yaffs源码,http://www.aleph1.co.uk/cgi-bin/viewcvs.cgi/,与内核放在同一目录

 

二、移植修改内核源码

1. 匹配U-bootkernel机器码,选择之一修改

    uboot中机器码设置gd->bd->bi_arch_number = MACH_TYPE_S3C2440362)。在文件u-boot/include/asm-arm/mach-types.h

内核机器码是由文件arch/arm/mach-s3c2440/mach-smdk2440.c中的函数

MACHINE_START(S3C2440, "SMDK2440")的第一个参数S3C2440决定的。linux内核中的机器码位于文件arch/arm/tools/mach-types查看文件中S3C2440机器码是362,但是后来将编译出的内核下载到开发板出现错误Error: unrecognized/unsupported machine ID,机器码一样却不能引导内核。由于我是在SDRAM采用go方式启动内核,这种方式不同于bootm方式,u-boot不会传machine ID给内核,go只是执行普通的应用程序。

参考网上bloghttp://blog.csdn.net/dongliqiang2006/archive/2009/05/21/4207309.aspx  

修改uboot中机器码为gd->bd->bi_arch_number = MACH_TYPE_SMDK24401008

修改内核中MACHINE_START(S3C2440, "SMDK2440")MACHINE_START(SMDK2440, "SMDK2440")

修改arch/arm/kernel/head.S文件

       .section ".text.head", "ax"

       .type       stext, %function

ENTRY(stext)

       /*********add here***********/

       mov     r0,#0

       mov     r1,#0x3f0     

       ldr     r2,=0x30000100

       /*********add end***********/

       msr  cpsr_c, #PSR_F_BIT | PSR_I_BIT | SVC_MODE @ ensure svc mode

这样修改以后的编译出的内核可以go引导。

 

2. 修改Makefile

ARCH            ?= arm

CROSS_COMPILE       ?= arm-linux-

 

3. 修改晶振频率arch/arm/mach-s3c2440/mach-smdk2440.c

static void __init smdk2440_map_io(void)

{

       s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));

       s3c24xx_init_clocks(12000000);

       s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));

}

 

4. 配置内核

先调用了默认的配置文件s3c2410_defconfig,在此基础上根据开发板配置内核

# make s3c2410_defconfig

# make menuconfig

 

5.配置内核,在上面一步调用默认配置文件,现在加上一些必要的配置

System Type  --->      

       S3C2410 Machines  --->

              [*] SMDK2410/A9M2410   一定选上,其它N

    S3C2440 Machines  --->  

       [*] SMDK2440

       [*] SMDK2440 with S3C2440 CPU module  留下这两项

S3C2400 Machines  --->S3C2412 Machines  --->S3C2442 Machines  --->S3C2443 Machines  --->里面的选项全部N掉,有人说在2440[*] SMDK2410/A9M2410可以不要,但是我试过会出错,不知道是不是版本问题。

arch/arm/plat-s3c24xx/s3c244x.c: In function `s3c244x_init_clocks':

arch/arm/plat-s3c24xx/s3c244x.c:121: error: implicit declaration of function `s3c2410_baseclk_add'

make[1]: *** [arch/arm/plat-s3c24xx/s3c244x.o] 错误 1

make: *** [arch/arm/plat-s3c24xx] 错误 2

 

Boot options  --->

        (root=/dev/hda1 ro init=/bin/bash console=ttySAC0)

改成(noinitrd root=/dev/mtdblock3 rootfstype=yaffs console=ttySAC0,115200 init=/linuxrc mem=64M)

nfs方式挂载根文件系统:noinitrd root=/dev/nfs rw nfsroot=192.168.1.128:/utu2440/rootfs ip=192.168.1.7:192.168.1.128:255.255.255.0 console=ttySAC0,115200 init=/linuxrc

 

Userspace binary formats  --->

       < > Kernel support for a.out and ECOFF binaries  N掉此选项,

a.outECOFF是两种可执行文件的格式,在ARMLinux下一般都用ELF

 

三、编译内核

# make zImage

# make modules

       arch/arm/boot目录中生成zImage,但是此时大部分硬件驱动未添加,也没用文件系统。Bootm可以直接引导uImage2.6.27以后的内核可以直接用make uImage来生成uImage镜像,但是bootm引导zImage格式内核需要用U-bootmkimage工具处理内核。因为在用bootm 命令引导内核的时候,bootm 需要读取一个64 字节的文件头,来获取这个内核映象所针对的CPU 体系结构、OS、加载到内存中的位置、在内存中入口点的位置以及映象名等等信息。这样bootm 才能为OS 设置好启动环境,并跳入内核映象的入口点。而mkimage 就是添加这个文件头的专用工具。

mkimage 工具的使用:

参数说明:

-A 指定 CPU 的体系结构,可用值有:alphaarm x86ia64mipsmips64

ppc s390shsparc sparc64m68k

-O 指定操作系统类型,可用值有:openbsdnetbsdfreebsd4_4bsdlinux

svr4esixsolarisirixscodellncrlynxosvxworkspsosqnxu-boot

rtemsartos

-T 指定映象类型,可用值有:standalonekernelramdiskmultifirmwarescript

filesystem

-C 指定映象压缩方式,可用值有:

none 不压缩(一般使用这个,因为zImage 是已经被bzip2 压缩过的自解压内核)

gzip gzip 的压缩方式

bzip2 bzip2 的压缩方式

-a 指定映象在内存中的加载地址,映象下载到内存中时,要按照用 mkimage 制作映象

时,这个参数所指定的地址值来下载

-e 指定映象运行的入口点地址,这个地址就是-a 参数指定的值加上0x40(因为前面有个

mkimage 添加的0x40 个字节的头)

-n 指定映象名

-d 指定制作映象的源文件

以下是制作内核映像的命令示例:

mkimage -A arm -O linux -T kernel -C none -a 0x30008000 –e 0x30008040 -n linux-2.6.24 -d zImage zImage.img

 

四、驱动移植

4.1 NAND Flash驱动移植

修改NAND Flash分区信息、硬件信息arch/arm/plat-s3c24xx/common-smdk.c

static struct mtd_partition smdk_default_nand_part[] = {

       [0] = {

              .name      = "uboot",

              .size = 0x00040000,

              .offset     = 0,

       },

       [1] = {

              .name      = "param",

              .offset = 0x00040000,

              .size = 0x00020000,

       },

       [2] = {

              .name      = "kernel",

              .offset = 0x00060000,

              .size = 0x00200000,

       },

       [3] = {

              .name      = "filesystem",

              .offset     = 0x002600000,

              .size = 0x03d9c0000,

       },

       /*[4] = {

              .name      = "S3C2410 flash partition 4",

              .offset = SZ_1M * 10,

              .size = SZ_4M,

       },

       [5] = {

              .name      = "S3C2410 flash partition 5",

              .offset     = SZ_1M * 14,

              .size = SZ_1M * 10,

       },

       [6] = {

              .name      = "S3C2410 flash partition 6",

              .offset     = SZ_1M * 24,

              .size = SZ_1M * 24,

       },

       [7] = {

              .name      = "S3C2410 flash partition 7",

              .offset = SZ_1M * 48,

              .size = SZ_16M,

       }*/

};

……

static struct s3c2410_platform_nand smdk_nand_info = {

       .tacls              = 0,

       .twrph0          = 30,

       .twrph1          = 0,

       .nr_sets   = ARRAY_SIZE(smdk_nand_sets),

       .sets        = smdk_nand_sets,

};

注意:不要按照以前一些移植内核在devs.c添加分区信息,不然启动时会有以下出错信息。

kobject_add failed for s3c2410-nand with -EEXIST, don't try to register things with the same name in the same directory.

[<c00290a8>] (dump_stack+0x0/0x14) from [<c0110a9c>] (kobject_shadow_add+0x160/0x1a8)

[<c011093c>] (kobject_shadow_add+0x0/0x1a8) from [<c0110af8>] (kobject_add+0x14/0x18)

[<c0110ae4>] (kobject_add+0x0/0x18) from [<c015117c>] (device_add+0xa0/0x568)

[<c01510dc>] (device_add+0x0/0x568) from [<c0155180>] (platform_device_add+0x100/0x150)

[<c0155080>] (platform_device_add+0x0/0x150) from [<c01551f0>]

 

去掉nand flashECCdrivers/mtd/nand/s3c2410.c

我的内核是通过U-BOOT写到Nand Flash, U-BOOT通过的软件ECC算法产生ECC校验码, 这与内核校验的ECC码不一样, 内核中的ECC码是由S3C2410Nand Flash控制器产生的。所以,我在这里选择禁止内核ECC校验。

s3c2410_nand_init_chip()函数中

chip->ecc.mode=NAND_ECC_SOFT;

改成

chip->ecc.mode=NAND_ECC_NONE;

 

NAND Flash配置:

Device Drivers --->

       <*> Memory Technology Device (MTD) support --->

              [*] MTD partitioning support

              <*> RedBoot partition table parsing

              [*] Command line partition table parsing

              <*> NAND Device Support --->

                     <*> NAND Flash support for S3C2410/S3C2440 SoC

 

4.2 yaffs2文件系统

对于YAFFS文件系统,网上说没有必要移植YAFFS2,因为它是为每页大于1024BNAND Flash设计的。其实即使移植了YAFFS2,如果你的NAND Flash是每页51216B的那系统也会自动挂载YAFFS

# tar –zxvf  cvs-root.tar.gz

# cd cvs/yaffs2

# ./patch-ker.sh c /home/liao/image/linux-2.6.24

 

Yaffs配置:(同时加上了jffs2cramfs、网络文件)

File systems -->

       < > Second extended fs support      N掉对ext2的支持

       < > Ext3 journalling file system support        N掉对ext3的支持

       <*> Kernel automounter support         添加3

<*> Kernel automounter version 4 support (also supports v3)

<*> Filesystem in Userspace support

Pseudo filesystems -->

       [*] Virtual memory file system support (former shm fs)    添加2

       <*> Userspace-driven configuration filesystem (EXPERIMENTAL)

Miscellaneous filesystems -->

       <*> YAFFS2 file system support     增加yaffs支持

       [ ]Autoselect yaffs2 format     这两项是给每页大于1024BNAND Flash

       [ ]Cache short names in RAM

       <*> Journalling Flash File System v2 (JFFS2) support  以下是对jffs支持

       (0)JFFS2 debugging verbosity (0 = quiet, 2 = noisy)

       [*]JFFS2 write-buffering support

       [ ]Verify JFFS2 write-buffer reads

       [ ]JFFS2 summary support (EXPERIMENTAL)

       [ ]JFFS2 XATTR support (EXPERIMENTAL)

       [*]Advanced compression options for JFFS2

       [*]JFFS2 ZLIB compression support

       []JFFS2 LZO compression support

       [*]JFFS2 RTIME compression support

       [*]JFFS2 RUBIN compression support

Network File Systems -->

       <*> NFS file system support 

[*]Provide NFSv3 client support  4项,否则挂载NFS可能出现protocol不支持

       [*]Provide client support for the NFSv3 ACL protocol extension

       [*]Provide NFSv4 client support (EXPERIMENTAL)

       [*]Allow direct I/O on NFS files

       <*> NFS server support 

       [*]Provide NFSv3 server support

       [*]Provide server support for the NFSv3 ACL protocol extension    

       [*]Provide NFSv4 server support (EXPERIMENTAL)        

       -*-Provide NFS server over TCP support 

       [*]Root file system on NFS

-*- Native language support --->

              --- Native language support

              (iso8859-1) Default NLS Option

              <*> Codepage 437 (United States, Canada)

              <*> Simplified Chinese charset (CP936, GB2312)

              <*> NLS ISO 8859-1 (Latin 1; Western European Languages)

              <*> NLS UTF-8

linux-2.6.24(1) 我是一个linux的爱好者,我收集的linux的各个版本的内核源代码都发布在这里了,有需要的朋友请用linux采用的规则命名方法在csdn上面搜索下载你所需要的版本号的内核源代码,有时候一个一个的上传太麻烦了,我做了压缩,不过我都写了版本号的范围,总体范围从linux1.0.tar到linux-2.6.29.tar,推荐朋友们用ultraedit去打开比较方便阅读,当然是自己喜欢的阅读器就行了,也不一定用这个,不过这个阅读起来的确比较好用的! 立即下载

相关推荐

linux-2.6.24-谢宝友注释版.7z

谢宝友对这个版本的内核注释了很多。值得我们深入学习。尤其是看源码的同学们需要有注释带入门。值得你去下载的linux2.6.24版本内核的注释(只有部分非全部)

linux内核2.6下载,linux-2.6.24 linux内核源码 - 下载 - 搜珍网

linux-2.6.24/.gitignorelinux-2.6.24/.mailmaplinux-2.6.24/arch/.gitignorelinux-2.6.24/arch/alpha/boot/bootloader.ldslinux-2.6.24/arch/alpha/boot/bootp.clinux-2.6.24/arch/alpha/boot/bootpz.clinux-2.6.24...

weixin_33838871的博客 648

linux-2.6.24.rar

Linux是一种开源电脑操作系统内核。它是一个用C语言写成,符合POSIX标准的类Unix操作系统。 [1] Linux最早是由芬兰黑客 Linus Torvalds为尝试在英特尔x86架构上提供自由免费的类Unix操作系统而开发的。该计划开始于1991年,在计划的早期有一些Minix 黑客提供了协助,而今天全球无数程序员正在为该计划无偿提供帮助。

linux 2.6.24.3源代码,s3c2410 linux-2.6.24内核移植记录

linux-2.6.24.tar.bz2解压,得到文件夹linux-2.6.24================================================================第1阶段================================================================1)、将linux-2.6.24/Makefile下的...

weixin_36313743的博客 314

linux最稳定的内核,号称最稳定 Linux内核2.6.24版本发布

作为 Linux 操作系统核心的 Kernel 最新稳定版 2.6.24 在今日得以发布。根据 Kernel Newbies 网站的描述,Linux Kernel 2.6.24 改善了 CFS、针对 x86-64、PPC、UML、ARM、MIPS 等架构添加了 Tickless 支持、新增了无线驱动程序及配置界面、引入了 Anti-fragmentation 补丁、使 MMC 层获得了 SPI/S...

weixin_28745975的博客 3131

移植DM9000驱动至内核(linux-2.6.32.24)

本文主要介绍如何移植DM9000的驱动到linux-2.6.32.24内核,笔者详细记录了内核移植过程中遇见的问题,并对每个问题的解决过程做了详细的记录。移植完成驱动后,并将其编译到内核中,并在板卡mini2440上进行测试,其能正常的连接到网络上,实现通信功能。

mftang的博客 1184

移植内核linux-2.6.32.24遇见的问题和解决方法

本文主要介绍移植移植内核linux-2.6.32.24遇见的问题和解决方法,使用的硬件系统为:mini2440,交叉编译器版本为:FriendlyARM提供的arm-linux-gcc-4.4.3.tar.gz。其他编译器没有试过,官方文档介绍,如果使用其他编译器,可能出现不能运行的情况。本文详细的记录了linux-2.6.32.24内核遇见的问题,并记录了解决这些问题的方法。

mftang的博客 1352

linux 2.6.24.4在S3C2410上的移植(内核配置)(基于GEC2410)

移植完u-boot后,接下来就是linux内核.以下记录我移植的步骤,如有问题,欢迎指正.1.下载linux kernel源代码到http://www.kernel.org/下载linux内核源代码,这里我们使用2.6.24.4的内核.解压linux-2.6.24.4.tar.bz2[matt@localhost GEC2410]$ tar -xvjf linux-2.6.24.4.tar.bz

shevsten的专栏 2732

linux24内核驱动,解决了移植2.6.24内核的LCD驱动移植问题

解决了移植2.6.24内核的LCD驱动移植问题发布时间:2008-03-27 13:35:26来源:红联作者:ylnyzl因为项目所要求的是VGA的显示,但是我在移植2.6.24内核后对LCD的驱动进行修改发现根本无法看到具体效果,于是我就想通过我自己的QQ2440开发板先做一下测试,因为QQ2440开发板我买时带一块3.5英寸的TFT屏,故先于昨天对其进行了2.6.24内核的LCD移植测试,基...

weixin_39996134的博客 133

linux 2.6.35 内核配置 usb,Linux 2.6.24.4移植到S3C2410(nano2410)之:USB

Linux 2.6.24.4移植到S3C2410(nano2410)之:USB【平台信息】目标板(Nano2410)------------------------CPU: S3C2410XSDRAM:HY57V561620(32MB)FLASH: K9F1208(64MB)NET: CS8900HOST---------------------------------------Linux Re...

weixin_34568147的博客 259

Linux2.6.24内核注释

hi, guys! 这是半年来,在看ULA的过程中,针对Linux 2.6.24内核顺手做的一点注释。内容不多,个人觉得文件系统和USB这两个模块的注释还有一点意思。 所有注释都是中文,您可以与标准2.6.24内核进行比较,看看具体的注释内容。 针对2.6.24注释的时间比较短,内容不多,抱歉,请不要拍砖。更多的注释是针对linux2.6.11.12内核的,您可以通过http://xiebaoyou.download.csdn.net下载,那个版本的注释算是干货。 如果您对内核有兴趣,可以在茶余饭后,无聊之时,访问我的博客 谢宝友 2014-05-29晚于成都

Linux内核源码(2.6.24

Linux内核源码,对有志于作linux内核编程的人或许有所帮助

linux-2.6.24:linux kernel 2.6.24原始代码分析和学习笔记

Linux 2.6内核学习笔记 本仓库已经开始作为gitbook仓库,访问地址 GitHub访问地址 Something I hope you know before go into the coding~ First, please watch or star this repo, I'll be more happy if you follow me. Bug report, questions and discussion are welcome, you can post an issue or pull a request. 参考书目 内容简介 本书讨论了Linux内核的概念,结构和实现。 主要内容包括多任务,调度和进程管理,物理内存的管理以及内核与相关硬件的交互,用户空间的进程如何访问虚拟内存,如何编写设备驱动程序,模块机制以及虚拟文件系统,Ext文件系统属性和访问控制表的

linux-2.6.24(2)

我是一个linux的爱好者,我收集的linux的各个版本的内核源代码都发布在这里了,有需要的朋友请用linux采用的规则命名方法在csdn上面搜索下载你所需要的版本号的内核源代码,有时候一个一个的上传太麻烦了,我做了压缩,不过我都写了版本号的范围,总体范围从linux1.0.tar到linux-2.6.29.tar,推荐朋友们用ultraedit去打开比较方便阅读,当然是自己喜欢的阅读器就行了,也不一定用这个,不过这个阅读起来的确比较好用的!

基于S3C2410的Linux2.6.24.7内核移植

原文出处 http://blog.chinaunix.net/u1/58780/showart_1080188.html Jacky Xu 一、主机环境  Linux version 2.4.20-8, RedHat9, VMWare5.5.3;  gcc version 3.4.4, Thread model: posix;  GNU Make 3.81;  arm-

ikensen的专栏 584

移植Linux2.6.24.7到博创2410-S(s3c2410s),包括AX88796移植

一、下载并解压Linux2.6.24.7内核源码从网上下载linux-2.6.24.7内核源码到/arm2410s目录下,并解压#tar xzvf linux2.6.24.7.tar.gz# cd linux2.6.24.7进入内核解压后的目录注:以后示例中,只要是相对路径全部是相对于/arm2410s/linux2.6.24.7/此目录  二、修改内核源码根目录下的Makef

lingdxuyan的专栏 3256

Linux2.6.24移植:LCD驱动

<br /> p { margin-bottom: 0.21cm; } <br />                                                                                            Linux2.6.24 移植:LCD 驱动<br />平台信息:<br />目标板 :MagicARM2410<br />

Smile 1933

在FS2410开发板上移植linux2.6.24初步成功[原创]

说是移植,也不太准确,因为linux2.6.24内核已经将s3c2410纳入。在移植的时候只是需要做几个小的改动以及几个注意的地方。一. 前言使用的内核linux2.6.24,http://www.kernel.org/pub/linux/kernel/v2.6/使用的arm交叉编译工具(4.2.1):http://www.codesourcery.com/gnu_toolchains/arm/

Denlee的一片天 1930
上一篇: U-Boot1.2.0移植YC2440
下一篇: AVPicture中data与linesize关系
liaozc
博客等级 码龄17年 39粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值