




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
u-boot1.1.6的移植(目标板TQ2440)1 编译测试Linux内核 2009-12-15 01:18:50 阅读146 评论0 字号:大中小订阅 如何将u-booot1.1.6从smdk2410移植到tq2440目标板?阅读了天嵌公司的tq2440开发板u-boot代码,以下是我的总结。 为实践需要,另起自己的目标板名字,故用jzy2440替代tq2440。蓝色的为修改部分,红色为jzy23注释。(一)编译测试1. /board目录下(1).将smdk2410目录复制为jzy2440目录。(2). 将jzy2440目录下的Makefile中的COBJS改为: COBJS :=jzy2440.o flash.o2./include/configs目录下将smdk2410.h复制为jzy2440.h。3.修改顶层Makefile 增加: jzy2440_config: unconfig$(MKCONFIG) $(:_config=) arm arm920t jzy2440 NULL s3c24X0 这两句的含义,可参见韦东山编著的嵌入式Linux应用开发完全手册的bootloader部分-第15章,第249页u-boot配置过程。4.使用支持softfloat的交叉编译器:crosstools_3.4.1_soft(光盘附带)。5.编译测试 配置make jzy2440_config编译:make 具体u-boot编译,连接过程参看韦东山嵌入式Linux应用开发完全手册第254页。6.清除上次编译的结果:make mrproperu-boot1.1.6的移植(目标板TQ2440)4 .lds设置Linux内核 2009-12-15 01:17:34 阅读43 评论0 字号:大中小订阅 (四).lds文件设置 注:蓝色部分为修改或者改动部分,红色部分为jzy23注解。在board/jzy2440/u-boot.lds里修改: SECTIONS. = 0x00000000;. = ALIGN(4);.text : cpu/arm920t/start.o(.text) board/jzy2440/boot_init.o (.text)/添加这句 *(.text). = ALIGN(4);.rodata : *(.rodata) . = ALIGN(4);.data : *(.data) . = ALIGN(4);.got : *(.got) . = .;_u_boot_cmd_start = .;.u_boot_cmd : *(.u_boot_cmd) _u_boot_cmd_end = .;. = ALIGN(4);_bss_start = .;.bss : *(.bss) _end = .;u-boot1.1.6的移植(目标板TQ2440)5代码重定向Linux内核 2009-12-15 01:15:55 阅读81 评论0 字号:大中小订阅 (五) 代码重定向 注:蓝色部分为修改或者改动部分,红色部分为jzy23注解。1. start.S里修改:#ifndef CONFIG_SKIP_RELOCATE_UBOOTrelocate:/* relocate U-Boot to RAM */adrr0, _start/* r0 - current position of code (r0=0) */ldrr1, _TEXT_BASE/* test if we run from flash or RAM(r1=0x33f80000 */cmp r0, r1 /*dont reloc during debug */beq clear_bss /*(原来为stack_setup)*/ldrr2, _armboot_start /*(r2为_start的地址=0x3ff80000)*/ldrr3, _bss_start /*(在连接文件中定义)*/subr2, r3, r2#if 1/*(增加)*/bl CopyCode2Ram/* r0: source, r1: dest, r2: size */ /*(跳转到CopyCode2Ram函数)*/#elseaddr2, r0, r2/ r2 - source end address */copy_loop:ldmiar0!, r3-r10/ copy from source address r0 */stmiar1!, r3-r10/ copy to target address r1 */cmpr0, r2/ until source end addreee r2 */blecopy_loop#endif#endif/ CONFIG_SKIP_RELOCATE_UBOOT */2.在board/jzy2440/boot_init.c中与CopyCode2Ram()相关的函数与定义如下:#include #include #define GSTATUS1 (*(volatile unsigned int *)0x560000B0)#define BUSY 1/ 供外部调用的函数 */void nand_init_ll(void);int nand_read_ll(unsigned char *buf, unsigned long start_addr, int size);/ NAND Flash操作的总入口, 它们将调用S3C2410或S3C2440的相应函数 */static void nand_reset(void);static void wait_idle(void);static void nand_select_chip(void);static void nand_deselect_chip(void);static void write_cmd(int cmd);static void write_addr(unsigned int addr);static unsigned char read_data(void);/ S3C2410的NAND Flash处理函数 */static void s3c2410_nand_reset(void);static void s3c2410_wait_idle(void);static void s3c2410_nand_select_chip(void);static void s3c2410_nand_deselect_chip(void);static void s3c2410_write_cmd(int cmd);static void s3c2410_write_addr(unsigned int addr);static unsigned char s3c2410_read_data(void);/ S3C2440的NAND Flash处理函数 */static void s3c2440_nand_reset(void);static void s3c2440_wait_idle(void);static void s3c2440_nand_select_chip(void);static void s3c2440_nand_deselect_chip(void);static void s3c2440_write_cmd(int cmd);static void s3c2440_write_addr(unsigned int addr);static unsigned char s3c2440_read_data(void);/ S3C2410的NAND Flash操作函数 */ 复位 */static void s3c2410_nand_reset(void) s3c2410_nand_select_chip(); s3c2410_write_cmd(0xff); / 复位命令 s3c2410_wait_idle(); s3c2410_nand_deselect_chip();/ 等待NAND Flash就绪 */static void s3c2410_wait_idle(void) int i;S3C2410_NAND * s3c2410nand = (S3C2410_NAND *)0x4e000000; volatile unsigned char *p = (volatile unsigned char *)&s3c2410nand-NFSTAT; while(!(*p & BUSY) for(i=0; iNFCONF &= (111); for(i=0; iNFCONF |= (1NFCMD; *p = cmd;/ 发出地址 */static void s3c2410_write_addr(unsigned int addr) int i;S3C2410_NAND * s3c2410nand = (S3C2410_NAND *)0x4e000000; volatile unsigned char *p = (volatile unsigned char *)&s3c2410nand-NFADDR; *p = addr & 0xff; for(i=0; i 9) & 0xff; for(i=0; i 17) & 0xff; for(i=0; i 25) & 0xff; for(i=0; iNFDATA; return *p;/ S3C2440的NAND Flash操作函数 */ 复位 */static void s3c2440_nand_reset(void) s3c2440_nand_select_chip(); s3c2440_write_cmd(0xff); / 复位命令 s3c2440_wait_idle(); s3c2440_nand_deselect_chip();/ 等待NAND Flash就绪 */static void s3c2440_wait_idle(void) int i;S3C2440_NAND * s3c2440nand = (S3C2440_NAND *)0x4e000000; volatile unsigned char *p = (volatile unsigned char *)&s3c2440nand-NFSTAT; while(!(*p & BUSY) for(i=0; iNFCONT &= (11); for(i=0; iNFCONT |= (1NFCMD; *p = cmd;/ 发出地址 */static void s3c2440_write_addr(unsigned int addr) int i;S3C2440_NAND * s3c2440nand = (S3C2440_NAND *)0x4e000000; volatile unsigned char *p = (volatile unsigned char *)&s3c2440nand-NFADDR; *p = addr & 0xff; for(i=0; i 9) & 0xff; */(不是8!)*/ for(i=0; i 17) & 0xff; for(i=0; i 25) & 0xff; for(i=0; iNFDATA; return *p;/ 在第一次使用NAND Flash前,复位一下NAND Flash */static void nand_reset(void) / 判断是S3C2410还是S3C2440 */ if (GSTATUS1 = 0x32410000) | (GSTATUS1 = 0x32410002) s3c2410_nand_reset();else s3c2440_nand_reset();static void wait_idle(void) / 判断是S3C2410还是S3C2440 */ if (GSTATUS1 = 0x32410000) | (GSTATUS1 = 0x32410002) s3c2410_wait_idle();else s3c2440_wait_idle();static void nand_select_chip(void) int i; / 判断是S3C2410还是S3C2440 */ if (GSTATUS1 = 0x32410000) | (GSTATUS1 = 0x32410002) s3c2410_nand_select_chip();else s3c2440_nand_select_chip(); for(i=0; iNFCONF = (115)|(112)|(111)|(TACLS8)|(TWRPH04)|(TWRPH1NFCONF = (TACLS12)|(TWRPH08)|(TWRPH1NFCONT = (14)|(11)|(10); / 复位NAND Flash */nand_reset();#define NAND_SECTOR_SIZE 512#define NAND_BLOCK_MASK (NAND_SECTOR_SIZE - 1)/ 读函数 */int nand_read_ll(unsigned char *buf, unsigned long start_addr, int size) int i, j; if (start_addr & NAND_BLOCK_MASK) | (size & NAND_BLOCK_MASK) return ; / 选中芯片 */ nand_select_chip(); for(i=start_addr; i (start_addr + size);) / 发出READ0命令 */ write_cmd(0); / Write Address */ write_addr(i); wait_idle(); for(j=0; j NAND_SECTOR_SIZE; j+, i+) *buf = read_data(); buf+; / 取消片选信号 */ nand_deselect_chip(); return 0;int bBootFrmNORFlash(void) volatile unsigned int *pdw = (volatile unsigned int *)0; unsigned int dwVal; / * 无论是从NOR Flash还是从NAND Flash启动, * 地址0处为指令bReset, 机器码为0xEA00000B, * 对于从NAND Flash启动
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年教育系统后备干部笔试试题与参考答案
- 浙江宁波市海曙区教育局招聘2025学年“专曙优师”教育人才65人(第一批)笔试高频难、易错点备考题库及答案详解一套
- 2025导游资格考试考试综合练习附参考答案详解【培优B卷】
- 2024年安全员考试常考点试卷【满分必刷】附答案详解
- 2025年高校教师资格证之《高等教育法规》题库试题及参考答案详解ab卷
- 2025临床执业医师过关检测试卷及一套完整答案详解
- 2024自考专业(工商企业管理)全真模拟模拟题含答案详解【综合卷】
- 当涂安全员证考及答案1
- 云南安全员考试及答案题库
- 2025年酒厂文化考试题及答案
- 《中国美术简史》课件
- 环卫车辆驾驶员安全培训
- 大客户销售工作规划及思路
- DB32-T 4446-2023 公共机构能源托管规程
- 京东方校园2024招聘胜任力测评题库
- 中建营盘山隧道2号斜井泄水专项施工方案
- CAD教程-AutoCAD2024全套教程
- 机房动力环境监控系统调试自检报告
- 装卸工安全培训
- 老年患者的营养支持治疗
- 国家职业技术技能标准 4-04-05-05 人工智能训练师 人社厅发202181号
评论
0/150
提交评论