热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linux2.6.33内核移植s3c2410以及搭建交叉编译环境,linux2.6.33内核移植(1)

宿主机:Redhat9.0目标机:s3c2440_fl2440交叉编译器:arm-linux-gcc-3.4.1交叉编译器路径࿱

宿主机:Redhat 9.0

目标机:s3c2440_fl2440

交叉编译器:arm-linux-gcc-3.4.1

交叉编译器路径:/home/thk8246/fl/file

要移植的内核版本:linux-2.6.33

文件系统类型: yaffs2 (目前使用光盘中linux-2.6.28的文件系统touch.yaffs)

个人体会:第一次移植linux内核没有加驱动,但是成功了,有点小高兴!虽然参考了飞凌的官方资料,里面有详细的步骤,但是某些方面还是不懂,比如nandflash驱动,原始值为2,为什么要改成1等等,但是我相信,久而久之,我就知其然,又知其所以然的。因为这linux学习不是一朝一夕之功呀!贵在坚持吗!

2、 将下载的文件存放在/home/thk8246/fl/source中。

3、 分别解压缩:

[root@localhost  source]# tar xzf linux-2.6.33.tar.gz -C ../file

[root@localhost  source]# tar xzf yaffs2.tar.gz -C ../fil

4、 为内核增加yaffs2补丁

[root@localhost  source]# cd ../file

[root@localhost  file]# cd yaffs2

[root@localhost  yaffs2]# ./patch-ker.sh c ../linux-2.6.33/

打印出信息如下,表示内核打补丁成功。

Updating ../linux-2.6.33//fs/Kconfig

Updating ../linux-2.6.33//fs/Makefile

5、 修改机器码。进入内核目录,修改机器码跟bootloader的机器码一致(FL2440为193)

[root@localhost  yaffs2]# cd ../linux-2.6.33

[root@localhost  linux-2.6.33]#vi arch/arm/tools/mach-types

首先注销以下行:

#s3c2410                 ARCH_S3C2410            S3C2410                 182

然后将以下行:

s3c2440                 ARCH_S3C2440            S3C2440                 362

修改为:

s3c2440                 ARCH_S3C2440            S3C2440                 193

6、 指定目标板machine、编译器和编译器路径。修改Makefile文件,注意将CROSS_COMPILE对应到你系统中交叉编译器地址

[root@localhost  linux-2.6.33]# vi Makefile

将两行:

ARCH            ?= $(SUBARCH)

CROSS_COMPILE   ?=

修改为以下两行:

ARCH            ?= arm

CROSS_COMPILE   ?=/home/thk8246/fl/file/3.4.1/bin/arm-linux-

7、 增加devfs文件管理器的支持。修改fs/Kconfig。

找到以下行:

menu "Pseudo filesystems"

在此行后面增加以下内容:

config DEVFS_FS

bool "/dev file system support (OBSOLETE)"

default y

config DEVFS_MOUNT

bool "Automatically mount at boot"

default y

depends on DEVFS_FS

8、 修改晶振频率( 可解决打印信息乱码问题 )。修改文件arch/arm/mach-s3c2440/mach-smdk2440.c

将如下行:

s3c24xx_init_clocks(16934400);

修改为:

s3c24xx_init_clocks(12000000);

9、 修改MTD分区。打开文件arch/arm/plat-s3c24xx/common-smdk.c,此处注意两个地方:一、必须跟bootloader分区一样,二、文件系统fs_yaffs必须在第4个分区,即索引号为3。其他一些分区信息可以不要,如下:找到static struct mtd_partition smdk_default_nand_part[]的结构体,将内容修改为:

1 static struct mtd_partition smdk_default_nand_part[] =

2  {

3         [0] = {

4                 .name        = "Boot",

5                 .size        = 0x00100000,

6                 .offset = 0

7           },

8         [1] = {

9                 .name        = "MyApp",

10                 .size        = 0x003c0000,

11                 .offset = 0x00140000,

12          },

13         [2] = {

14                 .name        = "Kernel",

15                 .size        = 0x00300000,

16                 .offset = 0x00500000,

17           },

18         [3] = {

//与bootleader一致,否则挂载不上文件系统

19                 .name        = "fs_yaffs",

20                 .size        = 0x03c00000,

21                 .offset = 0x00800000,

22          },

23         [4] = {

24                 .name        = "WINCE",

25                 .size        = 0x03c00000,

26                 .offset = 0x04400000,

27          }

28 };

10、 关闭ECC校验。修改文件drivers/mtd/nand/s3c2410.c

将以下行:

chip->ecc.mode      = NAND_ECC_SOFT;

修改为:

chip->ecc.mode      = NAND_ECC_NONE;

11、 修改nandflash驱动,支持K9F1G08的nandflash。文件为:drivers/mtd/nand/nand_bbt.c

将以下两个部分进行修改

static struct nand_bbt_descr largepage_memorybased = {

.options = 0,

.offs = 0,

.len = 1, //原始值为2,改成1

.pattern = scan_ff_pattern

};

static struct nand_bbt_descr largepage_flashbased = {

.options = NAND_BBT_SCAN2NDPAGE,

.offs = 0,

.len = 1, //原始值为2,改成1

.pattern = scan_ff_pattern

};

12、 把s3c2410的默认配置写入config文件。

[root@localhost  linux-2.6.33]# make s3c2410_defconfig

HOSTCC  scripts/basic/fixdep

HOSTCC  scripts/basic/docproc

HOSTCC  scripts/basic/hash

HOSTCC  scripts/kconfig/conf.o

HOSTCC  scripts/kconfig/kxgettext.o

SHIPPED scripts/kconfig/zconf.tab.c

SHIPPED scripts/kconfig/lex.zconf.c

SHIPPED scripts/kconfig/zconf.hash.c

HOSTCC  scripts/kconfig/zconf.tab.o

HOSTLD  scripts/kconfig/conf

#

# configuration written to .config

#

下面,开始配置内核。

配置内核,注意System Type中,S3C2440中只选择以下内容即可。

[root@ localhost  linux-2.6.33]# make menuconfig

配置CPU选项(记得与S3C2440 Machines平级的以及它的子项都不选,否则编译时会出现错误的)

System Type  --->

S3C2440 Machines  --->

[*] SMDK2440

[*] SMDK2440 with S3C2440 CPU module

配置yaffs2选项

File systems  --->

[*] Miscellaneous filesystems  --->

   YAFFS2 file system support

-*-     512 byte / page devices

-*-     2048 byte (or larger) / page devices

[*]       Autoselect yaffs2 format

[*]     Cache short names in RAM

13、 最后等着基本内核大功告成把。

[root@localhost  linux-2.6.33]# make zImage



推荐阅读
  • 字符设备驱动leds
    内核版本:4.12.9编译器:arm-linux-gcc-4.4.3本驱动基于jz2440v2开发板,实现3个led设备的驱动程序。代码如下:1#include ... [详细]
  • 32位ubuntu编译android studio,32位Ubuntu编译Android 4.0.4问题
    问题一:在32位Ubuntu12.04上编译Android4.0.4源码时,出现了关于emulator的错误,关键是其Makefile里的 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 本文概述了JNI的原理以及常用方法。JNI提供了一种Java字节码调用C/C++的解决方案,但引用类型不能直接在Native层使用,需要进行类型转化。多维数组(包括二维数组)都是引用类型,需要使用jobjectArray类型来存取其值。此外,由于Java支持函数重载,根据函数名无法找到对应的JNI函数,因此介绍了JNI函数签名信息的解决方案。 ... [详细]
  • 原文地址http://balau82.wordpress.com/2010/02/28/hello-world-for-bare-metal-arm-using-qemu/最开始时 ... [详细]
  • C#设计模式之八装饰模式(Decorator Pattern)【结构型】
    一、引言今天我们要讲【结构型】设计模式的第三个模式,该模式是【装饰模式】,英文名称:DecoratorPattern。我第一次看到这个名称想到的是另外一个词语“装修”,我就说说我对“装修”的理 ... [详细]
  • uboot与linux驱动1.uboot本身是裸机程序(1)在裸机中本来是没有驱动概念的(狭义的驱动概念是指在操作系统中用来具体操控硬 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • springboot项目引入jquery浏览器报404错误的解决办法
    本文介绍了在springboot项目中引入jquery时,可能会出现浏览器报404错误的问题,并提供了解决办法。问题可能是由于将jquery.js文件复制粘贴到错误的目录导致的,解决办法是将文件复制粘贴到正确的目录下。如果问题仍然存在,可能是其他原因导致的。 ... [详细]
  • linux进阶50——无锁CAS
    1.概念比较并交换(compareandswap,CAS),是原⼦操作的⼀种,可⽤于在多线程编程中实现不被打断的数据交换操作࿰ ... [详细]
  • 本文介绍了在实现了System.Collections.Generic.IDictionary接口的泛型字典类中如何使用foreach循环来枚举字典中的键值对。同时还讨论了非泛型字典类和泛型字典类在foreach循环中使用的不同类型,以及使用KeyValuePair类型在foreach循环中枚举泛型字典类的优势。阅读本文可以帮助您更好地理解泛型字典类的使用和性能优化。 ... [详细]
  • 负载均衡_Nginx反向代理动静分离负载均衡及rewrite隐藏路径详解(Nginx Apache MySQL Redis)–第二部分
    nginx反向代理、动静分离、负载均衡及rewrite隐藏路径详解 ... [详细]
  • 【技术分享】一个 ELF 蠕虫分析
    【技术分享】一个 ELF 蠕虫分析 ... [详细]
  • VS用c语言连接mysql,c语言连接mysql完整演示
    #include#includeintmain(){MYSQL*conn;创建一个指向mysql数据类型的指针connmysql_init(NULL);mysql的初始化if(!c ... [详细]
  • Word2vec,Fasttext,Glove,Elmo,Bert,Flairpre-trainWordEmbedding源码数据Github网址:词向量预训练实现Githubf ... [详细]
author-avatar
手机用户2602925995
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有