⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 u-boot移植笔记.txt

📁 u-boot相关的一些文章
💻 TXT
📖 第 1 页 / 共 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下那么直观。首先要建立好交叉编译环境,这个交叉编译环境可以自己来做,不过完全没必要,而且难度也挺大,一般是下载人家编译好的工具。我刚开始在这里就郁闷了很久,现在会了以后觉得原来就是这么简单,在些我把方法说清楚,希望不会再有人为这个问题郁闷了^_^

  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或把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目录下执行如下命令:1) Make distclean (再次强调)2) Make B2_config(随便再个现成的试试^_^)   
 
  3) Make (没错的话应该会生成u-boot.bin文件,发生错误的话也不怕,只要细心看一下哪里错就行了,gcc碰到错误后会退出编译,所以可以一个个错误来改,一般的问题都是没找到编译器(可能你没装或者装的不对,例如人家用的是arm-linux-而你装的是arm-elf-,如果你装了的话看看你的环境变量设好了没有,前面有讲,如果不关编译器的事的话那就再看看,一般是文件的后缀不对,有些文件后缀是大写的,例如start.S但是如果你的是 start.s小写的话那当然找不到(解决方法很,把它改成大写就行了)。细心看吧,不用怕,它都有注明路径,很容易可以找到的))如果以上步骤都无误的话那么恭喜你,你的交叉编译环境可以用来编译你的u-boot源代码了,可以开始以下阶段(待续)


移植:说时迟那时快,现在开始移植工作(以下是我一步步重新做一遍,力求说得详细点,感谢我吧^_^)我以B2板子的程序做为模板来做. #cd u-boot-1.1.2#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==60divisor = 32; UFCON0 = 0x0; ULCON0 = 0x03; UCON0 = 0x245; UBRDIV0 = divisor; 我在这方面算术不好,所以都是参考人家的。

  3)好,再加上个头文件:cd u-boot-1.1.2/include/configscp 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_configMake看看有没有错,有错的话按着提示来改,如果没错的话应该就能生成u-boot.bin这个文件,现在还不能用哦,因为这几是B2的一个仿制品而已(注:在我的机上到这一步可没有报错哦,你一步步按着来做的话应该也不会有什么错误吧^_^)



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 这个是网卡相就寄存器的起始地址以下部分我试过不要也行,你试下吧

  #define  RTL8019_BUS32 0#define CONFIG_SMC_USE_16_BIT#undef CONFIG_SHOW_ACTIVITY

  #define CONFIG_NET_RETRY_COUNT 10 应该是重试的次数吧 #define CONFIG_BAUDRATE 115200 设置波特率

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -