为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

u-boot移植日记

2012-04-06 12页 pdf 51KB 17阅读

用户头像

is_214676

暂无简介

举报
u-boot移植日记 u-boot移植日记 很好的文章 • u-boot移植日记 很好的文章(转载) 06.10.27 from darkhero 相关文章(2) 来源 以文找文 上一篇 下一篇 Tag:嵌入式应用 这篇文章不错,快看看收藏了该文章的所有2人,我也要收藏 几经艰辛,终于基本完成了u-boot在s3c44b0的移植工作,在些记录一下在移植过程中所碰到的困难和解决方法(一 些心得),作为日后参考之用,也希望能够帮到其它有需要的人^_^。 1.来由: 在我搞完uco...
u-boot移植日记
u-boot移植日记 很好的文章 • u-boot移植日记 很好的文章(转载) 06.10.27 from darkhero 相关文章(2) 来源 以文找文 上一篇 下一篇 Tag:嵌入式应用 这篇文章不错,快看看收藏了该文章的所有2人,我也要收藏 几经艰辛,终于基本完成了u-boot在s3c44b0的移植工作,在些一下在移植过程中所碰到的困难和解决方法(一 些心得),作为日后参考之用,也希望能够帮到其它有需要的人^_^。 1.来由: 在我搞完ucos后(本来我是想学uclinux的,不过在对系统一无所知的情况下,还是先学一下ucos比较实际^_^,从中也 可以对系统有个清晰的概念),我意识到要搞系统的话一个功能强大的bootloader是必不可少的,而我的板上自带的 是armboot(其实我个人觉得应用在ARM上的话armboot已经足够了,毕竟u-boot也是从armboot中发展过来的,纯属 个人),如果我的板上自带光盘有已经移植好的armboot源代码供我参考的话,我想我也不会花这么多时间去搞 u-boot,可恨的是我的光盘上只有armboot.bin这个二进制文件,而没有源文件,没办法,我下定主意自己搞一个,考 虑了一番后我选择了u-boot,毕竟参考资料相对比较多,再我学完u-boot后再回头看armboot,简直是一个炉里出的 饼,这是后话。 2.准备: 说是容易,做起来却挺难。因为编译u-boot要在linux环境下,而不能在我们平时所熟悉的ads下那么直观。首 先要建立好交叉编译环境,这个交叉编译环境可以自己来做,不过完全没必要,而且难度也挺大,一般是下载人家 编译好的工具。我刚开始在这里就郁闷了很久,现在会了以后觉得原来就是这么简单,在些我把方法说清楚,希望 不会再有人为这个问题郁闷了^_^: file:///E|/sxn/u-boot移植日记 很好的文章.htm(第 1/12 页)2008-1-3 13:22:16 u-boot移植日记 很好的文章 1) 在网上下载一个u-boot源代码,我用的是1.1.2版本的,最新的应该是1.1.4的吧,其实差不多,那就像我那样下载 一个1.1.2版本的吧。把源文件解压,这个应该不用说了吧,学过linux的人应该会,不会的话我想你继续做下去也困 难,那就先装个linux用下吧(我用的是RedHat的,哦对了,编译程序是需要gcc编译器的,所以安装方式一定要选择 工作站哦^_^)。好了,解压后你发现在u-boot.1.1.2目录下有Makefile这个文件吧?让我们看看它里面的内容,最简 单的方法就是vi Makefile了。我们要看的是它选择的是哪一个交叉编译器。可以看到这一项: ifeq ($(ARCH),arm) CROSS_COMPILE = arm-linux- 看到吧,也就是说这里所用的交叉编译器是arm-linux-gcc了,(u-boot默认是用这个的,也有用arm-elf-gcc的,网上 有个工具包arm-elf-tools-20030314.sh,我试过用它来编译,没有问题,顺便提一下,arm-elf-gcc是用来编译uClinux内 核的工具来的)那你就下载一个arm-linux-的交叉编译器吧,我是在网上下载cross-2.95.3.tar.bz2这个文件,然后解压 得到2.95.3版本的交叉编译工具的,具体设置如下(参考网上资料): 2)在宿主机上建立arm-linux-gcc交叉编译环境 在RedHat Linux系统下以root用户登录, 将cross-2.95.3.tar.bz2文件复制到/目录下, 安装: # tar jxvf cross-2.95.3.tar.bz2 这个命令会在你的/usr/local/arm/2.95.3目录下安装 arm-linux-gcc 交叉编译程序, 然后在PATH变量中添加一项:/usr/local/arm/2.95.3/bin. [root@localhost root]# export ATH=/usr/local/arm/2.95.3/bin:$PATH file:///E|/sxn/u-boot移植日记 很好的文章.htm(第 2/12 页)2008-1-3 13:22:16 u-boot移植日记 很好的文章 或 把PATH=/usr/local/arm/2.95.3/bin:$PATH添加到/ETC/bash_profile文件中 或者 在/etc/bashrc文件中添加一项: export PATH=/usr/local/arm/2.95.3/bin:$PATH 测试: 把终端关闭,重新打开后执行如下命令: # arm-linux-gcc –v 好了,建立好交叉编译环境后可以试着编译u-boot了 这里提几个注意点: 1.不可用winRAR解压u-boot-1.1.2.tar.bz2或u-boot-1.1.2.tar.gz这种文件(就个可能新手会犯,一般熟悉linux命令的人 应该都不会这样做吧,在此还是要提一下) 2.可能下载的文件有一些中间文件会阻碍编译的运行,所以在编译前最好来个彻底清除,在u-boot.1.1.2目录下运行 命令:make distclean (其实这个命令在Makefile文件下就有)我当时为这个问题郁闷了很久,希望你们不会像我这 样^_^); 3,有些人为了方便想在cygwin下编译,但是经常在网上看到在这个虚拟平台下编译有很多的问题,要配置的东西也 多,而且好像我用过那个vi没有linux环境下的好用,所以最好还是不要用这个软件了吧,如果你真的离不开windows 的话可以像我这样装个虚拟机,在虚拟机下再装linux的系统,具体参考这个网站):http://fedora.linuxsir.org/doc/ vmware/ 3)好了,现在开始测试你的交叉编译器搞好没有。在u-boot.1.1.2目录下执行如下命令: file:///E|/sxn/u-boot移植日记 很好的文章.htm(第 3/12 页)2008-1-3 13:22:16 u-boot移植日记 很好的文章 1) Make distclean (再次强调) 2) Make B2_config(随便再个现成的试试^_^) 3) Make (没错的话应该会生成u-boot.bin文件,发生错误的话也不怕,只要细心看一下哪里错就行了,gcc碰到错 误后会退出编译,所以可以一个个错误来改,一般的问题都是没找到编译器(可能你没装或者装的不对,例如人家 用的是arm-linux-而你装的是arm-elf-,如果你装了的话看看你的环境变量设好了没有,前面有讲,如果不关编译器的 事的话那就再看看,一般是文件的后缀不对,有些文件后缀是大写的,例如start.S但是如果你的是start.s小写的话那 当然找不到(解决方法很,把它改成大写就行了)。细心看吧,不用怕,它都有注明路径,很容易可以找到的)) 如果以上步骤都无误的话那么恭喜你,你的交叉编译环境可以用来编译你的u-boot源代码了,可以开始以下阶段。 u-boot移植日记2(新手必读) 3.移植: 说时迟那时快,现在开始移植工作(以下是我一步步重新做一遍,力求说得详细点,感谢我吧^_^) 我以B2板子的程序做为来做. #cd u-boot-1.1.2 file:///E|/sxn/u-boot移植日记 很好的文章.htm(第 4/12 页)2008-1-3 13:22:16 u-boot移植日记 很好的文章 #cd board #cp -R dave myboard (这是我取的板子名字,可以换上你的,但是后面的也要跟着来换哦^_^) #cd myboard #mv B2 myboards3c44b0 (自己取个板子名) #cd myboards3c44b0 # mv B2.c myboards3c44b0.c 修改myboards3c44b0里面的Makefile, 把B2改成myboards3c44b0,编译时如果报的其它类似找不到B2的错误也是把相 应的B2改成myboards3c44b0来处理。 1)其中的myboards3c44b0.c文件是板的初始化代码,看一下就知道,根据你的板上自带的44binit.s来修改吧。 memsetup.S文件主要是存储器的初始化设置,其实也是44binit.s里面的一部分。 2)其实board这里要修改的不多,先跳过flash部分吧,我们来看一下cpu设置部分吧。 u-boot-1.1.2里面已经加入了对s3c44b0的支持,让我们来看一下cpu/s3c44b0里面的部分吧。 看到start.S这个文件了吗?要修改的其实并不多,按照你的板设置一下中断跳转矢量就行了,或者上网查一下吧, 应该很容易看明的。其中cpu.c这个文件简直不用修改,再来看一下serial.c这个文件吧,改一下波特率的设置就行, 就是你用多少M的CPU频率的话对应的波特率参数设置问题,其实B2已经做得不错的了,很多子程序都不用自己写 的了^_^,在我的板上是这样设置的,参考一下吧: #if CONFIG_S3C44B0_CLOCK_SPEED==66 ,把所有的这些66改成60,原因,我的实验板上用的频率是60(44B0最 高频率为64M)。然后其它分频系数,寄存器初始化设置,可以参考一下44blib.c,在这里我给出我的设置出来吧, 可以参考一下。 case 115200: #if CONFIG_S3C44B0_CLOCK_SPEED==60 divisor = 32; UFCON0 = 0x0; ULCON0 = 0x03; UCON0 = 0x245; UBRDIV0 = divisor; 我在这方面算术不好,所以都是参考人家的。 file:///E|/sxn/u-boot移植日记 很好的文章.htm(第 5/12 页)2008-1-3 13:22:16 u-boot移植日记 很好的文章 3)好,再加上个头文件: cd u-boot-1.1.2/include/configs cp B2.h myboards3c44b0.h 这个头文件其实要改的地方还挺多的,我等下再说怎样修改。先回到u-boot.1.1.2目录, 4)在Makefile里面加上这部分,不会的话就模仿B2来写吧^_^ 在B2的这部分文件 B2_config : unconfig @./mkconfig $(@:_config=) arm s3c44b0 B2 dave 后面加上这部分: myboards3c44b0_config : unconfig @./mkconfig $(@:_config=) arm s3c44b0 myboard3c44b0 myboard 切记在@./mkconfig $(@:_config=) arm s3c44b0 myboard3c44b0 myboard前面的是Tab来的,万万不能用空格代替, 因为它是靠这个来识别命令的! 5)好,现在可以在u-boot-1.1.2目录下执行如下命令: Make distclean(还是用这个吧,比较彻底) Make myboards3c44b0_config Make 看看有没有错,有错的话按着提示来改,如果没错的话应该就能生成u-boot.bin这个文件,现在还不能用哦,因为这 几是B2的一个仿制品而已(注:在我的机上到这一步可没有报错哦,你一步步按着来做的话应该也不会有什么错误 file:///E|/sxn/u-boot移植日记 很好的文章.htm(第 6/12 页)2008-1-3 13:22:16 u-boot移植日记 很好的文章 吧^_^) u-boot移植日记3(新手必读) 6)好,现在继续修改u-boot-1.1.2/include/configs/myboards3c44b0.h这个文件。 #define CONFIG_INIT_CRITICAL 1 这个在cpu/s3c44b0/start.S里面用到,如果你的u-boot程序不是在sdram中调 试而是固化到flash中运行的话,这个必不可少。 找到 #define CONFIG_B2 1 把B2改成myboards3c44b0吧(不然就不会编译你的板了) 找到 #define CONFIG_S3C44B0_CLOCK_SPEED 75 你的44b0x应该没有75M吧 我的是改成60的 找到Size of malloc() pool这部分设置,改成这样吧,反正我是照着人家来做的,你自己研究下吧^_^。 #define CFG_MONITOR_LEN (256 * 1024) /* Reserve 256 kB for Monitor */ #define CFG_ENV_SIZE (64*1024) /* 1024 bytes may be used for env vars*/ #define CFG_MALLOC_LEN (CFG_ENV_SIZE + 128*1024 ) #define CFG_GBL_DATA_SIZE 128 /* size in bytes reserved for initial data */ #define CFG_ENV_IS_IN_FLASH 1 这个必不可少,如果你想把你的参数保存到flash的话(有些板是保存到 EEPRAM中去的,但是s3c44b0的话还是保存到flash吧) #define CFG_ENV_ADDR (PHYS_FLASH_1+0x40000) 这个就是你的参数保存在flash里的起始地址了 #define CFG_ENV_OFFSET 0x40000 这个我后来看它源程序发现如果你上一步没有设置它的起始地址的话就会用 它来作默认地址的了 #define CONFIG_AUTO_COMPLETE 其它地方没有深究哦,有些好像不要也行,你就试试吧。 找到Hardware drivers部分,这应该是网络芯片设置吧,参考一下这个吧(要看芯片的): #define CONFIG_DRIVER_RTL8019 这个就要看你的板上用的是什么网卡了(这个是台湾出的,有10M) #define RTL8019_BASE 0x06000000 这个是网卡相就寄存器的起始地址 file:///E|/sxn/u-boot移植日记 很好的文章.htm(第 7/12 页)2008-1-3 13:22:16 u-boot移植日记 很好的文章 以下部分我试过不要也行,你试下吧 #define RTL8019_BUS32 0 #define CONFIG_SMC_USE_16_BIT #undef CONFIG_SHOW_ACTIVITY #define CONFIG_NET_RETRY_COUNT 10 应该是重试的次数吧 #define CONFIG_BAUDRATE 115200 设置波特率 #define CONFIG_COMMANDS ( CONFIG_CMD_DFL | \ CFG_CMD_DATE | \ CFG_CMD_ELF | \ CFG_CMD_NET | \ CFG_CMD_EEPROM | \ CFG_CMD_I2C | \ CFG_CMD_FAT | \ CFG_CMD_JFFS2) 把CFG_CMD_EEPROM改成CFG_CMD_FLASH吧,虽然不改也是可以的,具体没考究。 以下是板上env参数设置,看一下吧,其实我觉得了解一下就行的了,只是一些初始设置值,以后可以用命令 setenv saveenv来修改的。 #define CONFIG_BOOTDELAY 3 这个就是运行bootcmd之前的等待时间 #define CONFIG_BOOTARGS "devfs=mount root=ramfs console=ttyS0,115200" 引导uClinux的时候传递的参数,不会 就先不用管它也行。 #define CONFIG_ETHADDR 00:50:c2:1e:af:fb 网卡的物理地址MAC #define CONFIG_NETMASK 255.255.255.0 掩码地址,设置过ip的人都应该知道吧 file:///E|/sxn/u-boot移植日记 很好的文章.htm(第 8/12 页)2008-1-3 13:22:16 u-boot移植日记 很好的文章 #define CONFIG_IPADDR 192.168.0.30 这是你板上网卡8019的ip地址 #define CONFIG_SERVERIP 192.168.0.10 这是你宿主机的ip地址,以后用tftp下载的时候用到,一定要跟你的 宿主机一致才行。 #define CONFIG_BOOTFILE "u-boot.bin" 这个就是你要下载文件的默认名字 #define CONFIG_BOOTCOMMAND "bootm 0x50000" 这是bootdelay后运行的命令 Miscellaneous configurable options部分,参考一下吧: #define CFG_LONGHELP /* undef to save memory */ #define CFG_PROMPT "s3c44b0=>" 这是进入命令模式下的提示符,改个帅一点的吧 #define CFG_CBSIZE 256 /* Console I/O Buffer Size */ #define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */ #define CFG_MAXARGS 100 /* max number of command args */ #define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */ #define CFG_MEMTEST_START 0x0C400000 /* memtest works on */ #define CFG_MEMTEST_END 0x0C800000 /* 4 ... 8 MB in DRAM */ #undef CFG_CLKS_IN_HZ /* everything, incl board info, in Hz */ #define CFG_LOAD_ADDR 0x0c008000 默认的下载地址 #define CFG_HZ 1000 /* 1 kHz */ #define CFG_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 } 可供选择的波特率 Physical Memory Map部分,比较重要,修改你的sdram和flash的地址和容量。 #define CONFIG_NR_DRAM_BANKS 1 我们只占用了一个Bank用来映射sdram #define PHYS_SDRAM_1 0x0c000000 sdram的起始地址 file:///E|/sxn/u-boot移植日记 很好的文章.htm(第 9/12 页)2008-1-3 13:22:16 u-boot移植日记 很好的文章 #define PHYS_SDRAM_1_SIZE 0x00800000 sdram的容量(8M) #define PHYS_FLASH_1 0x00000000 flash的起始地址 #define PHYS_FLASH_SIZE flash的容量(2M) #define CFG_FLASH_BASE PHYS_FLASH_1 定义多个名字而已,其它地方会用到 FLASH organization部分,看注释应该知道了吧,参考一下: #define CFG_FLASH_ERASE_TOUT 4120000 /* Timeout for Flash Erase (in ms) */ #define CFG_FLASH_WRITE_TOUT 4000 /* Timeout for Flash Write (in ms) */ 按着来一步步的做应该不难,这里提一下vi程序的用法,其实在google一搜就找到了,不过为了方便大家,还是说一 声吧, 在命令模式下: 按/ xxx再回车即可搜索到你所需要的内容(xxx),再按n搜索下一个,按shift+n搜索上一个 按:xxx即可跟到你想要的行 按:set nu显示行号 其它查书都可以找到就不说了。 做到这个时候,你可以再编译一下,看有没有错,这一步我就没有帮你们做了,不过我觉得应该不会有问题吧,下 载到ram中运行,看看效果。 u-boot移植日记4(新手必读) 7)终于到了flash的设置部分了,这完全是我个人悟出来的,网上资料好像讲得不是先清楚。 首先介绍一下flash的识别吧,每块flash都有一个id,前部分用来说明生产厂家,后部分用来说明它的容量,类型, 位数等。它们的定义是在u-boot-1.1.2/include/flash.h中,就以我的ssts9vf1601为例: file:///E|/sxn/u-boot移植日记 很好的文章.htm(第 10/12 页)2008-1-3 13:22:16 u-boot移植日记 很好的文章 #define SST_MANUFACT 0x00BF00BF 这是生产厂家id #define SST_ID_xF1601 0x234B234B 这是它的型号,容量,位数等id #define FLASH_SST160A 0x0046 这个我还说不清楚,有个要注意的问题是像sst160是不能用奇地址的,我做的 过程中是把SST160A改成SST1601的,懒得帮它创一个 好了,相信你已经找到你的板上所用的flash对应的id号了吧?现在就来谈谈怎么改。 先进入u-boot-1.1.2/board/myboards3c44b0/common/flash.c 它里面已经帮SST160A设置好了,我的做法是把SST公司的160A都改成1601,是不是很简单,当然你也可以帮1601 再写一分,但是我是个懒人,所以我就样做了^_^ 到这里还有个问题没提到的,就是如果你重新用setenv saveenv 设置了参数,但是复位后会发现怎么没有保存到的 (不信你试试看)。其实我是故意留到这里讲的,应该它不会报错,可以说是比较隐秘的问题,所以我故意放到这 里来说,以引起你的重视。 解决方法:vi u-boot-1.1.2/board/myboard/common/flash.c 找到这个函数:write_buff 里面有这句话:#ifdef CONFIG_B2 要把B2改了,因为我们的板不叫B2,那叫什么呢?原来是在这里定义的:u-boot-1.1.2/include/configs/ myboards3c44b0.h 里面有这句话:#define CONFIG_HFRK 你不喜欢HFRK这个名字也行,可以改成别的名字,只不过相应地前面的B2 也要改成这个名字而已。 4.后记: 本来是想刚做好的时候写的,但是后来发现有些功能实现不了,所以就停住了笔,等我搞好了以后,又急着去学 file:///E|/sxn/u-boot移植日记 很好的文章.htm(第 11/12 页)2008-1-3 13:22:16 u-boot移植日记 很好的文章 习uClinux的移植,真的很忙,现在终于抽空把它写完。虽然有些地方还没说清楚(毕竟我对它的了解还不是很深, 但我相信在我以后移植系统的过程中会逐步加深对它的了解),我还是希望它能成为最详尽的u-boot移植新手指 导,对u-boot移植的初学者起到实质性的作用,这样就不枉我花了这么多的心思来写这个文档。 上一篇 下一篇 (darkhero的分类目录[我的图书馆]中共79篇) 以文找文 :搜索互联网上的相关文章 相关文章 • 收集了一些关于U-BOOT的文章(zt) 07.04.27 from Archangel • uclinux在ARM9上的移植 06.10.27 from darkhero 发表评论 游客请登录后再发表评论! 您还没注册?30秒快速拥有您的“个人图书馆”! file:///E|/sxn/u-boot移植日记 很好的文章.htm(第 12/12 页)2008-1-3 13:22:16 EHIAEPIJFKLIAJPOJFKIDHLHFFBIIPBA: form1: x: f1: f2: f3: dDwtMTQyMDEyNTUyNzs7PsRy7JVpCs1d2R1apFqV4P6BK0oN
/
本文档为【u-boot移植日记】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索