Welcome 微信登录

首页 / 操作系统 / Linux / Linux内核移植-移植2.6.35.4内核到s3c2440

硬件平台:FL2440主机平台:Ubuntu 11.04交叉编译器:arm-linux-gcc 4.3.2本来是想移植最新的内核2.6.39但是总是在编译快完成的时候报错,有人说是新的内核对arm平台的支持不好,所以就降低了一下版本,这里移植2.6.35.4内核一、准备工作1、下载 解压内核从官网上下载linux-2.6.35的内核, ftp://ftp.kernel.org/pub/linux/kernel/v2.6/ ,文件不大,约85M。新建一个工作目录s3c2440,将内核源码包拷贝至工作目录下,再解压。2、移植yaffs2驱动下载最新的驱动(见 http://www.linuxidc.net/thread-2408-1-1.html) 解压在工作目录s3c2440下进入yaffs2:  cd yaffs2 给内核打补丁: ./patch-ker.sh  c ../linux-2.6.35

3、安装交叉编译环境 下载arm-linux-gcc 4.3.2,然后安装并配置环境变量最后执行arm-linux-gcc -v查看

二、移植

 ??1、修改机器码飞凌开发板的bootloader默认的机器码是193,所以我们在使用smdk2440机器的时候,需要修改机器码。修改内核2.6.35.3中的arch/arm /tools/mach-types。?? 删掉s3c2410      ARCH_S3C2410    S3C2410    182 然后将s3c2440      ARCH_S3C2440    S3C2440    362 修改为s3c2440      ARCH_S3C2440    S3C2440    1932、指定目标板machine、编译器和编译器路径?修改linux-2.6.35.3/Makefile,将ARCH                ?= $(SUBARCH) CROSS_COMPILE        ?= 修改成ARCH                ?= arm CROSS_COMPILE        ?= /opt/arm/4.3.2/bin/arm-linux- 注意:CROSS_COMPILE是指交叉编译器的路径,该路径一定要完整,否则最后make zImage时提示文件不存在。3、增加devfs文件管理器的支持我们所用的文件系统使用的是devfs文件管理器。修改fs/Kconfig,找到menu "Pseudo filesystems"添加如下语句:config DEVFS_FS         bool "/dev file system support (OBSOLETE)"         default y    config DEVFS_MOUNTbool "Automatically mount at boot"default ydepends on DEVFS_FS 帮助理解:Kconfig就是对应着内核的配置菜单。假如要想添加新的驱动到内核的源码中,能够修改Kconfig,这样就能够选择这个驱动,假如想使这个驱动被编译,要修改Makefile。4、修改晶振频率( 可解决打印信息乱码问题 )文件:arch/arm/mach-s3c2440/mach-smdk2440.c/*s3c24xx_init_clocks(16934400);*/  s3c24xx_init_clocks(12000000);5、修改MTD分区
  1. static struct mtd_partition smdk_default_nand_part[] = {  
  2. [0] = {  
  3.         .name   = "Boot",  
  4.         .size   = 0x00100000,  
  5.         .offset = 0  
  6.     },  
  7.     [1] = {  
  8.         .name   = "MyApp",  
  9.         .size   = 0x003c0000,  
  10.         .offset = 0x00140000,  
  11.     },  
  12.     [2] = {  
  13.         .name   = "Kernel",  
  14.         .size   = 0x00300000,  
  15.         .offset = 0x00500000,  
  16.     },  
  17.     [3] = {  
  18.         .name   = "fs_yaffs",  
  19.         .size   = 0x0f000000,    //240M   
  20.         .offset = 0x00800000,  
  21.     },    
  22.     /*[4] = { 
  23.         .name   = "WINCE", 
  24.         .size   = 0x03c00000, 
  25.         .offset = 0x04400000, 
  26.     } 
  27.     */  
  28. };        
具体参考http://www.linuxidc.com/Linux/2011-06/37772.htm
6、关闭ECC校验文件:drivers/mtd/nand/s3c2410.c 
函数:s3c2410_nand_init_chip/*chip->ecc.mode = NAND_ECC_SOFT; */  chip->ecc.mode = NAND_ECC_NONE; 问题:关于ECC:ECC是“Error Correcting Code”的简写,中文名称是“错误检查和纠正”。ECC是一种能够实现“错误检查和纠正”的技术,ECC内存就是应用了这种技术的内存,一般多应用在服务器及图形工作站上,这将使整个电脑系统在工作时更趋于安全稳定。此处为避免容易出错,将ECC关闭。7、修改nandflash驱动,支持K9F1G08的nandflash    修改drivers/mtd/nand下面的nand_bbt.c 文件:
  1. static struct nand_bbt_descr largepage_memorybased = {  
  2.         .options = 0,  
  3.         .offs = 0,  
  4.         .len = 1,           // 原数值为2,支持2K每页的flash修改为1。K9F1G08,K9F2G08是2k每页的flash   
  5.         .pattern = scan_ff_pattern  
  6. };  
  7. static struct nand_bbt_descr largepage_flashbased = {  
  8.         .options = NAND_BBT_SCAN2NDPAGE,  
  9.         .offs = 0,  
  10.         .len = 1,           //原数值为2,支持2K每页的flash修改为1。K9F1G08,K9F2G08是2k每页的flash   
  11.         .pattern = scan_ff_pattern  
  12. };  
8、下面,开始配置内核。进入linux-2.6.35目录,把s3c2410的默认配置写入config文件。make s3c2410_defconfigmake menuconfig配置内核特点使用ARM EABI编译

配置文件系统选项
配置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配置cpu相关选项
修改配置如下:System Type  --->     S3C2440 Machines  --->         [*] SMDK2440        [*] SMDK2440 with S3C2440 CPU module去掉S3C2400 Machines、S3C2410 Machines、S3C2412 Machines、S3C2442 Machines的所有选项 ,否则会报错。如果现在编译内核,下载到开发板中,内核就可以正常启动了.有了雏形,继续移植设备驱动。这里,内核选项*代表编译至内核,M代表编译为模块 。
  • 1
  • 2
  • 3
  • 下一页
Ubuntu下安装使用 tesseract-ocropenSUSE 11.2 SSH安装并启动SSH无法登录解决相关资讯      Linux内核  Ubuntu 11.04 
  • IT人员必须了解的六项Linux内核变  (今 12:05)
  • Linux 内核更新:3.10.98、3.14.62  (02月26日)
  • Linux:让手机运行主线内核  (11/26/2015 22:16:17)
  • Linux内核自防护项目  (05月24日)
  • Linux 内核架构的理解  (12/09/2015 09:01:01)
  • Linux内核被指缺乏安全性  (11/07/2015 08:28:47)
本文评论 查看全部评论 (2)
表情: 姓名: 字数


评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款
版权所有©石家庄振强科技有限公司2024 冀ICP备08103738号-5 网站地图