




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
uboot-1.3.2移植到s3c2410一、准备工作1、 打开VM box虚拟机,启动linux系统。2、 对虚拟机进行设置:共享文件夹设置连接pc机与虚拟机,把需要用到的压缩包(u-boot-1.3.2.tar.bz2 arm-linux-gcc-4.4.3.tar.gz linux-2.6.0.tar.bz2 patch-2.6.0.bz2)放到共享文件夹(我将其命名为share,地址自动保存为/media/sf_share)。3、 Linux系统下,打开终端,然后:重置密码:命令sudo passwd获取超级用户权限:命令su root4、在/home下新建目录arm-work存放u-boot源码: (1)进入/home:命令cd /home (2)新建目录:命令mkdir arm-work (3)将源码拷贝到linux下的/home/arm-work/下:命令cp /media/sf_share/u-boot-1.3.2.tar.bz2 /home/arm-work 5、解压:切换到/home/arm-work/目录下:cd /home/arm-work/解压源码: 命令tar jxvf u-boot-1.3.2.tar.bz2此时解压后得到u-boot-1.3.2目录进入到源码目录:cd u-boot-1.3.2二、现在开始就进行整个源码的移植工作:1、建立自己开发板的目录,我将我的开发板取名为s3c2410,现在大多开发板都是由三星公司的SMDK2410板子改装而来,所以为了尽量地省改文件,将SMDK开发板的相关目录拷贝过来进行修改即可。建立自己开发板目录:命令cp -rf board/smdk2410 board/s3c2410将board/s3c2410下的Makefile中smdk2410.o修改成s3c2410.o如下图: 将修改为建立自己开发板的配置头文件:(分析考虑需不需要复制smdk2410.c到s3c2410.c)命令cp include/configs/smdk2410.h include/configs/s3c2410.h为自己的开发板添加配置:配置顶层Makefile命令emacs Makefile 或vi Makefile进入Makefile文件输入命令/smdk 会跳转到以smdk开头的位置,即在适当位置添中自己的板子smdk2400_config:unconfig$(MKCONFIG) $(:_config=) arm arm920t smdk2400 NULL s3c24x0smdk2410_config:unconfig$(MKCONFIG) $(:_config=) arm arm920t smdk2410 NULL s3c24x0s3c2410_config:unconfig$(MKCONFIG) $(:_config=) arm arm920t s3c2410 NULL s3c24x0(注意红色部分为我添加或者修改的此时再终端中输入:输入命令make s3c2410_config终端将显示: 输入命令make出错如下: 即交叉编译未安装三、进行交叉编译的步骤:/Linux/2013-06/85902.htm/link?url=Y6_41bPlMdHjiGXc-qAqrKwucUVwQb_jTuQAwJwpPaXOCAG9Oou0dN21rG0ABB7d96t2ALx1oFYGS6QDj7zLzFdgvSIo5gKj1HEaLavI_i1、 将交叉编译工具压缩包arm-linux-gcc-4.4.3.tar.gz从/media/sf_share目录下拷贝到/usr/local目录下:命令cp /media/sf_share/arm-linux-gcc-4.4.3.tar.gz /usr/local2、在/usr/local目录下新建arm目录命令mkdir arm解压压缩包arm-linux-gcc-4.4.3.tar.gz命令tar zxvf arm-linux-gcc-4.4.3.tar.gz 它会解压到opt目录下,我们需要的工具在/opt/FriendlyRAM/toolschain/4.4.3里面,由于路径太长,所以将4.4.3拷贝到arm目录下命令cp -rf opt/FriendlyARM/toolschain/4.4.3 arm3、修改配置文件,将arm-linux-gcc添加到环境变量中,因为arm-linux-gcc的命令是在/usr/local/arm/4.4.3/bin下,其目的通过对全局变量绑定使之能够在任意一个目录下能够执行该命令。(1)打开设置文件命令 vi /etc/profile(2)再打开的文件的# Path manipulationif $EUID = 0 ; thenpathmunge /sbinpathmunge /usr/sbinpathmunge /usr/local/sbinpathmunge /usr/local/arm/4.4.3/binfi或者在文件末尾添加export PATH=$PATH:/usr/local/arm/4.4.3/bin保存退出4、 立即使新的环境变量生效,不用重启电脑命令source /etc/profile5、 检查是否将路径加入到PATH:命令echo $PATH显示的内容中有/usr/local/arm/4.4.3/bin,说明已经将交叉编译器的路径加入PATH。至此,交叉编译环境安装完成。6、 测试是否安装成功(1)首先,执行find命令查询一下arm-linux-gcc的位置命令find / -name arm-linux-gcc可以看到arm-linux-gcc的位置与环境变量中设定的路径一致(2)接下来查询arm-linux-gcc的版本命令arm-linux-gcc -v可以看到arm-linux-gcc的版本号,至此,arm-linu-gcc已成功安装。四、回到第二步1、输入make命令出现了两个错误:2、 修改错误:(1)修改设置:输入命令vi common/main.cvi lib_arm/board.c分别进入编辑在main.c中命令i (为输入命令)/inline(为跳转到该行,如下图)把inline 去掉保存退出在board.c中把inline去掉 保存退出(2)修改cpu设置:进入arm920t输入命令vi config.mk进入在PLATFORM_CPPFLAGS += -march=armv4后加t即可保存退出输入命令make一阵编译的英语飘过若编译通过,则将会在目录下生成u-boot.bin,表明建立自己的开发板已经成功,可进到下一步,进行相关的修改,以符合自己的开发板。五、修改源码让u-boot支持从Nand Flash启动。具体如下:1、 修改cpu/arm920t/start.S文件执行命令:emacs cpu/arm920t/start.S 或vi cpu/arm920t/start.S 说明:红色部分是我个人添加的,并作了一些相关注释。关于第一处与第二处,加上宏定义的原因是那两个灯是为在AT91RM9200的开发板上用来指示状态的,所以加上。第三处与第四处是为了让其能从nand flash启动起来。另外特别值得注意的是那个绿色的宏,我下载的u-boot版本是1.3.3之前的最后一个1.3.2的发行版,这个地方已经改过来了,可能有些1.3.2的版本此处还是#ifndefCONFIG_AT91RM9200,那么下面的一段重定向代码将会执行,copy_loop也会执行,所以是启动不起来的。在我所下载的1.3.3中的源码中就有这个问题,即使我的1.3.3没有移植成功。我们已经修改了start.S这个文件。接下来还需要几步修改才能启动起来。 第一处30行左右:在#include前面加上#ifdef CONFIG_AT91RM9200在#include后面加上#endif /* CONFIG_AT91RM9200 */第二处:120行左右在bl coloured_LED_init前面加上#ifdef CONFIG_AT91RM9200在bl red_LED_on后面加上#endif /* CONFIG_AT91RM9200 */第三处:204行左右在#endif/* CONFIG_SKIP_RELOCATE_UBOOT */#endif后面加上/*add% */#ifdef CONFIG_S3C2410_NAND_BOOTblcopy_myself#endif /* CONFIG_S3C2410_NAND_BOOT */* add% */第四处:在233行左右在_start_armboot: .word start_armboot”语句之后加入copy_loop子程序:/* add % */* copy u-bootto ram*/#ifdef CONFIG_S3C2410_NAND_BOOTcopy_myself:movr10, lrsave return address to r10ldrsp, DW_STACK_START movfp, #0 blNF_Init ldrr0, =UBOOT_RAM_BASE movr1, #0x0movr2, #0x30000blnand_read_wholetstr0, #0x0beqok_nand_read1:b1bok_nand_read:movr0, #0x00000000ldrr1, =UBOOT_RAM_BASEmovr2, #0x400go_next:ldrr3, r0, #4ldrr4, r1, #4teqr3, r4bnenotmatchsubsr2, r2, #4beqdone_nand_readbnego_nextnotmatch:1:b1bdone_nand_read:movpc, r10#endifDW_STACK_START:.wordSTACK_BASE+STACK_SIZE-4/* add % */2、在板级目录下新建Nand Flash的读函数文件:新建“u-boot-1.3.2/ board/s3c2410/nand.c”文件执行命令:vi board/s3c2410/nand.c或进入board/s3c2410目录下vi nand.c然后将下面的内容粘贴进去,并且保存退出:#include #include #include #define TACLS0#define TWRPH03#define TWRPH10#define U32 unsigned intextern unsigned long nand_probe(unsigned long physadr);static void NF_Reset(void)int i;NF_nFCE_L(); /* 片选Nand Flash芯片*/NF_CMD(0xFF); /* 复位命令 */for(i=0;i10;i+); /* 等待tWB = 100ns. */NF_WAITRB(); /* wait 200500us; */NF_nFCE_H(); /* 取消Nand Flash 选中*/void NF_Init(void)/* 设置Nand Flash配置寄存器, 每一位的取值见1.3节 * initial value is 0xf830 */rNFCONF=(115)|(114)|(113)|(112)|(111)|(TACLS8)|(TWRPH04)|(TWRPH10);/* 复位外部Nand Flash芯片 */NF_Reset();/* 从Nand Flash中把数据读入到RAM中 */int nand_read_whole(unsigned char *buf, unsigned long start_addr, int size)int i, j;/* 如果起始地址和长度不是512字节(1页)的倍数, 则返回错误代码 */if (start_addr & NAND_BLOCK_MASK) | (size & NAND_BLOCK_MASK) return 1;/* 激活Nand Flash */NF_nFCE_L();for(i=0; i10; i+);i = start_addr;while(i 9) & 0xff;rNFADDR = (i 17) & 0xff;rNFADDR = (i 25) & 0xff;NF_WAITRB();/* 读出一页(512字节) */for(j=0; j NAND_SECTOR_SIZE; j+, i+) *buf = (rNFDATA & 0xff);buf+;/* 停止驱动Nand Flash */NF_nFCE_H();return 0;这个文件是严重地板级依赖的,取决于你开发板的FLASH芯片,我的是K9F1208U0B,估计很多板子都是用这个FLASH芯片。3、修改“u-boot-1.3.2/board/s3c2410/Makefile”文件执行命令:vi board/s3c2410/Makefileinclude $(TOPDIR)/config.mkLIB= $(obj)lib$(BOARD).aCOBJS:= s3c2410.o flash.o nand.oSOBJS:= lowlevel_init.o红色部分为修改的内容。4、修改板级配置头文件修改“u-boot-1.3.2/include/configs/smdk2410.h”文件执行命令: vi include/configs/s3c2410.h在180行左右在文件的最后一个#endif的前面添加如下内容:#define CONFIG_S3C2410_NAND_BOOT 1#define STACK_BASE0x33f00000#define STACK_SIZE0x8000#define UBOOT_RAM_BASE0x33f80000#define CFG_NAND_BASE 0x4E000000 /* Nand Flash控制器在SFR区中起始寄存器地址 */#define CFG_MAX_NAND_DEVICE 1 /* 支持的最在Nand Flash数据 */#define SECTORSIZE 512 /* 1页的大小 */#define NAND_SECTOR_SIZE SECTORSIZE#define NAND_BLOCK_MASK (NAND_SECTOR_SIZE - 1) /* 页掩码 */#define ADDR_COLUMN 1 /* 一个字节的Column地址 */#define ADDR_PAGE 2 /* 3字节的页块地址, A9A25*/#define ADDR_COLUMN_PAGE 3 /* 总共4字节的页块地址 */#define NAND_ChipID_UNKNOWN 0x00 /* 未知芯片的ID号 */#define NAND_MAX_FLOORS 1#define NAND_MAX_CHIPS 1/* Nand Flash命令层底层接口函数 */#define WRITE_NAND_COMMAND(d, adr) do rNFCMD = d; while(0)#define WRITE_NAND_ADDRESS(d, adr) do rNFADDR = d; while(0)#define WRITE_NAND(d, adr) do rNFDATA = d; while(0)#define READ_NAND(adr) (rNFDATA)#define NAND_WAIT_READY(nand) while(!(rNFSTAT&(10);#define NAND_DISABLE_CE(nand) rNFCONF |= (111);#define NAND_ENABLE_CE(nand) rNFCONF &= (111);/* 下面一组操作对Nand Flash无效 */#define NAND_CTL_CLRALE(nandptr)#define NAND_CTL_SETALE(nandptr)#define NAND_CTL_CLRCLE(nandptr)#define NAND_CTL_SETCLE(nandptr)/* 允许Nand Flash写校验 */#define CONFIG_MTD_NAND_VERIFY_WRITE 1#ifdef CONFIG_S3C2410_NAND_BOOT#define rNFCONF (*(volatile unsigned int *)0x4e000000)#define rNFCMD (*(volatile unsigned char *)0x4e000004)#define rNFADDR (*(volatile unsigned char *)0x4e000008)#define rNFDATA (*(volatile unsigned char *)0x4e00000c)#define rNFSTAT (*(volatile unsigned int *)0x4e000010)#define rNFECC (*(volatile unsigned int *)0x4e000014)#define rNFECC0 (*(volatile unsigned char *)0x4e000014)#define rNFECC1 (*(volatile unsigned char *)0x4e000015)#define rNFECC2 (*(volatile unsigned char *)0x4e000016)/* 操作的函数实现* 1. 发送命令 */#define NF_CMD(cmd) rNFCMD=cmd;/* 2. 写入地址 */#define NF_ADDR(addr) rNFADDR=addr;/* 3. Nand Flash芯片选中 */#define NF_nFCE_L() rNFCONF&=(111);/* 4. Nand Flash芯片不选中 */#define NF_nFCE_H() rNFCONF|=(111);/* 5. 初始化ECC */#define NF_RSTECC() rNFCONF|=(112);/* 6. 读数据 */#define NF_RDDATA() (rNFDATA)/* 7. 写数据 */#define NF_WRDATA(data) rNFDATA=data;/* 8. 获取Nand Flash芯片状态 */#define NF_WAITRB() while(!(rNFSTAT&(10);/* 0/假: 表示Nand Flash芯片忙状态* 1/真:表示Nand Flash已经准备好*/#endif保存退出六、使u-boot支持dm9000网卡步骤如下:1、将dm9000x.h和dm9000x.c两个文件拷贝到drivers/net/下2. 修改“u-boot-1.3.2/include/configs/s3c2410.h”文件执行命令:vi include/configs/s3c2410.h(1)将原网卡“CS8900”改为“DM9000”(2)添加网络命令(3)修改IP地址(4)修改命令提示符(5)修改默认下载地址(6)修改环境变量在Nand Flash中的存储地址具体如下:(1)将原网卡“CS8900”改为“DM9000” 在56行左右注释掉:/ #define CONFIG_DRIVER_CS8900 1 /* we have a CS8900 on-board */ #define CS8900_BASE 0x19000300/ #define CS8900_BUS16 1 /* the Linux driver does accesses as shorts */这3行之后添加:#define CONFIG_DRIVER_DM9000 1#define CONFIG_DRIVER_DM9000_BASE 0x10000000#define DM9000_IO CONFIG_DM9000_BASE#define DM9000_DATA (DM9000_IO + 2)#define CONFIG_DM9000_USE_16BIT(2)添加网络命令找到下面的几行:#define CONFIG_CMD_CACHE#define CONFIG_CMD_DATE#define CONFIG_CMD_ELF在97行左右 在其下面添加下面几行:#define CONFIG_CMD_REGINFO#define CONFIG_CMD_NAND#define CONFIG_CMD_PING#define CONFIG_CMD_DLF#define CONFIG_CMD_ENV#define CONFIG_CMD_NET(3)修改IP地址找到下面几行:#define CONFIG_BOOTDELAY 3/*#define CONFIG_BOOTARGS root=ramfs devfs=mount console=ttySA0,9600 */*#define CONFIG_ETHADDR 08:00:3e:26:0a:5b */#define CONFIG_NETMASK #define CONFIG_IPADDR 10#define CONFIG_SERVERIP /*#define CONFIG_BOOTFILE elinos-lart */*#define CONFIG_BOOTCOMMAND tftp; bootm */修改为:#define CONFIG_BOOTDE
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 2999-2025耐火材料颗粒体积密度试验方法
- 2025年安全员安全生产操作题库及模拟题
- 2025年英语教师职业等级认证初级考试模拟题与答案详解
- 校园消防安全专题片(3篇)
- 2025年网络安全工程师面试模拟题及面试技巧
- 2025年小学教师安全知识测试题含考核答案
- 2025年安全生产安全管理知识安全趋势题及答案
- 2025届东营市利津县中考冲刺卷数学试题含解析
- 2025年后期制作岗位面试常见问题及答案
- 2025年安全管理竞聘面试常见问题答案
- 危险废物处置服务协议
- 《观光农业概论》课件
- 派出所签订治安调解协议书范文
- 情境领导力培训课件
- DBJ41T 277-2023 装配式钢结构集成楼盖应用技术规程 河南省工程建设标准(住建厅版)
- 飞灰螯合物运输服务方案
- 中建三局社招在线测评题
- 研究生学术表达能力培养智慧树知到答案2024年西安建筑科技大学、清华大学、同济大学、山东大学、河北工程大学、《环境工程》英文版和《环境工程》编辑部
- 玉米种植风险评估与管理
- 2024-2030年中国自动涂胶机行业市场发展趋势与前景展望战略分析报告
- DL∕T 2582.1-2022 水电站公用辅助设备运行规程 第1部分:油系统
评论
0/150
提交评论