注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

zhouhaigang.love的博客

喜欢冬日黄昏那冻住的山

 
 
 

日志

 
 

linux2.6内核移植之--U-BOOT编译与烧写  

2011-01-13 10:43:50|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
linux2.6内核移植之--U-BOOT编译与烧写
2009-03-01 16:28

  今天原本要休息的,去书店看看书,然后晚上看球赛。可是早晨起来这么一打开空间呀,又看见大学时候的死党BOB给我的留言,哎。。。他又鼓励我了,我心里说:“宝宝你可真是我的催命鬼,还让不让人轻松了?”哈哈,其实看见朋友们都在努力,我也不能闲着了,要不该被社会淘汰了,所以还是决定继续写我知道的那么一丁点知识,今天就写u—boot吧,以后有时间再写把移植2.6内核的心得体会搬到我百度的家,就当是整理学习笔记了。

  首先我得介绍在ARM处理器上移植linux操作系统的思想:

  了解操作系统的人都知道,从操作系统的角度出发,软件是要分四种的(可不是计算机课上学的什么系统软件,应用软件。。。这里根本不是一个概念)。1。bootloader(初始化底层设备,串口,内存。。。等底设备),就是引导程序。这部分在PC机上使用grup,嵌入式系统上用vivi或者是u-boot

  2。kernel 内核,这个不用多说了吧。这个常用的是zImage

  3。filesystem 文件系统,就是你能看得到的但摸不着的东西。

  4。userapplication 应用软件,谁都知道,这个是要自己写的。

  说到bootloader,vivi我用过,但没有u-boot强大,古人说“工欲善其事,必先利其器”所以我选择后者。

  切记,在编译uboot之前千万别忘了配置交叉编译器。然后才可以继续操作。

  下载uboot http://www.hhcn.org/maindoc/nandboot-2410-luofuchong.rar  包括补丁文件u-boot-lfc.patch

  u-boot下的目录结构:

  board——目标板相关文件,主要包含SDRAM、Flash驱动;

  common——独立于处理器体系结构的通用代码,如 内存大小探测与故障检测;

  cpu——与处理器相关的文件,如mpc8xx子目录下含串口、网口、LCD驱动及中断初始化等文件;

  driver——通用设备驱动,如CFI Flash驱动(目前对Intel Flash支持较好)

  doc——U-Boot的说明文档;

  examples——可在U-Boot下运行的示例程序;如   helloworld.c,timer.c;

  include——U-Boot头文件,configs子目录下与目标板相关的配置头文件是移植过程中经常要修改的文件;

  lib_xxx——处理器体系相关的文件,如lib—ppc,lib_arm目录分别包含与PowerPC、ARM体系结构相关的文件;

  net——与网络功能相关的文件目录,如bootp、nfs、tftp;

  post——上电自检文件目录,尚有待于进一步完善;

  rtc——RTC驱动程序;

  tools——用于创建U-Boot S-RECORD和BIN镜像文件的工具。(这些都是复制的,太多了实在是记不住)

  1。为u-boot打补丁,因为linux2.6已经发行很长时间了,而嵌入式处理器却在不断更新,所以要想自己编译的uboot能更好的支持开发板,就要先为它打上补丁。很简单,u-boot解压后,将u-boot-lfc.patch放在它的上一级目录,然后执行打补丁命令 patch -p1 < u-boot-lfc-patch (注意那可不是小于号,是输入重定向符)。

  2。记住要检查一遍PATH环境变量,千万不要百密一疏,有时候一个不经意的错误操作会让你前功尽弃的,看看你的交叉编译器是否配置成功。如果你是通过修改/etc/profile文件配置的,记住要重启系统。

  3。可以配置自己的开发板了。(这里以s3c2410为例)

   命令:make smdk2410_config      如果你查看过ubootgh下的 Makefile文件就会发现(大约1593行),这里定义了很多相似的类型,这都是uboot支持的,其中smdk2410也在其中,它的编译原则是先unconfig取消以前的配置,编译smdk2410的配置。执行完后会出现configuring for smdk2410 board....

  4。下面就可以编译了,执行命令:CROSS_COMPILE=arm-linux-  (=号前面的我现在还有些疑惑,怕误导了大家,就先不说了,以后会补上。=号后面是指定GCC编译命令的前缀。)按下回车就开始编译了,可能要等几分钟。如果编译成功,就会在当前目录下生成一个u-boot.bin文件,好了,这个就是你需要的uboot了。

  以上只是u-boot的初步编译,之所以这么说是因为smdk2410开发要求支持Nand Flash。这里要做的工作是:

  1。修改/board/smdk2410/flash.c(flash 驱动)

  经过分析,发现从第68行开始的代码是选择flash类型,本套开发板支持的flash是AMD_LV160

  在大约74行添加以下二行代码:

  #elif define (CONFIG_AMD_LV160)

        (AMD_MANUFACT & FLASH_VENDMASK) | (FLASH_AM160LV & FLASH_TYPEMASK);

  以上伪指令只是定义了flash存储器,继续向下找,会发现switch 语句,而且本语句用到了很多关于存储器型号的宏定义,没错就是它了,这里应该是存储器选择,仿照上面的定义,添加如下语句:(大约148行) case (FLASH_AM160LV & FLASH_TYPEMASK):

                       printf()lx Amd160lv (64Mbit);

                       break;

         2。修改 include/configs/smdk2410.h,因为方才修改了flash驱动,所以还要在头文件中加入nand flash的定义。

    打开文件,查找需要添加语句的地方(你可以根据其它的flash定义决定自己的flash定义,因为uboot会同时支持多种flash,而它们的定义和选择都在一起,只要记下一个自带的存储器宏,然后查找,就可以判断出需要在哪里添加flash定义。)

    经过查找可以确定应该在165行以下添加一行#define CONFIG_AMD_LV160

             继续往下看,下面代码定义的都是存储器的参数,这里也要添加。

     #ifdef CONFIG_AMD_LV160

               #define PHYS_FLASH_SIZE 0X200000

               #define CFG_MAX_FLASH_SECT (35)

               #define CFG-ENV-ADDR (CFG_FLASH_BASE + OX1F0000)

               #endIf

               3. 然后还要在 include/linux/mtd/nand.ids.h 文件中声明一下下。

    直接到文件末尾在结构体中添加一行:

    {"Samsung K9F1208UOM", NAND_MFR_SAMSUNG, 0x79, 26, 0, 3, 0x4000, 0},

             

  

    重新执行编译命令,编译好u-boot后下一步就要烧写b ,我也太累了,明天再继续吧

  评论这张
 
阅读(109)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017