友善之臂最新版mini2440学习笔记——u-boot 1.1.6移植(一)
从本文开始,将记录博主在进行u-boot 1.1.6移植过程中遇到的问题。本文将涉及两个问题:
1. u-boot中添加开发板
2. u-boot第一阶段启动代码
1. u-boot中添加开发板
1.1. Makefile更改
1.1.1. 增加反汇编文件输出
Makefile文件中239行,源文件为:
ALL = $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map $(U_BOOT_NAND)
更改为:
ALL = $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map $(obj)u-boot.dis $(U_BOOT_NAND)
1.1.2. 添加开发板
Makefile文件1879行,按照smdk2410的形式,添加mini2440开发板配置如下:
mini2440_config : unconfig@$(MKCONFIG) $(@:_config=) arm arm920t mini2440 NULL s3c24x0
1.1.3. 自动清理时删除反汇编文件
Makefile文件2293行,源文件为:
rm -f $(obj)u-boot $(obj)u-boot.map $(obj)u-boot.hex $(ALL)
修改为:
rm -f $(obj)u-boot $(obj)u-boot.map $(obj)u-boot.hex $(obj)u-boot.dis $(ALL)
1.2. 添加头文件
在include/configs/目录下添加mini2440.h文件。可以直接拷贝一份smdk2410.h文件。
1.3. 添加核心版文件
在board/目录下添加mini2440目录。可直接拷贝smdk2410文件夹即可。
1.4. 小结
自此,mini2440开发板已经添加到u-boot 1.1.6中。可直接执行如下命令生成u-boot.bin文件
make mini2440_configmake
但这个u-boot.bin文件并无法启动,需要修改相关代码进行移植。
2. U-boot第一阶段启动代码移植
mini2440的SOC为S3C2440,它的CPU为一个ARM920t的核,因此u-boot第一阶段启动代码就是cpu/arm920t/start.S文件。
2.1. 关闭看门狗和中断服务
S3C2440的看门狗和S3C2410一样,因此在start.S文件进行如下修改:
124行源代码:
#elif defined(CONFIG_S3C2410)
# define pWTCON 0x53000000
# define INTMSK 0x4A000008 /* Interupt-Controller base addresses */
# define INTSUBMSK 0x4A00001C
# define CLKDIVN 0x4C000014 /* clock divisor register */
更改为:
#elif defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)
# define pWTCON 0x53000000 /* watchdog register address */
# define INTMSK 0x4A000008 /* interrupt mask register address */
# define INTSUBMSK 0x4A00001C /* interrupt sub-mask register address */
# define CLKDIVN 0x4C000014 /* clock divisor register */
131行源代码:
#if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410)ldr r0, =pWTCONmov r1, #0x0str r1, [r0]
更改为:
#if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)
ldr r0, =pWTCON
mov r1, #0x0
str r1, [r0]
142行源代码:
# if defined(CONFIG_S3C2410)ldr r1, =0x3ffldr r0, =INTSUBMSKstr r1, [r0]
之后添加部分代码,变为:
# if defined(CONFIG_S3C2410)ldr r1, =0x3ffldr r0, =INTSUBMSKstr r1, [r0]
#elif defined(CONFIG_S3C2440)ldr r1, =0x7FFFldr r0, =INTSUBMSKstr r1, [r0]
2.2. 设置MPLL和UPLL
源代码中,找到:
/* FCLK:HCLK:PCLK = 1:2:4 *//* default FCLK is 120 MHz ! */ldr r0, =CLKDIVNmov r1, #3str r1, [r0]
更改为:
#if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410)/* FCLK:HCLK:PCLK = 1:2:4 *//* default FCLK is 120 MHz ! */ldr r0, =CLKDIVNmov r1, #3str r1, [r0]
#elif defined(CONFIG_S3C2440)
# define MPLLCON 0x4C000004
# define UPLLCON 0x4C000008ldr r0, =CLKDIVNldr r1, =0x5 /* FCLK:HCLK:PCLK = 1:4:8 */str r1, [r0]ldr r0, =MPLLCONldr r1, =0x5C011 /* MPLL=400MHz */str r1, [r0]ldr r0, =UPLLCONldr r1, =0x38022 /* UPLL=48MHz */str r1, [r0]/* configure S3C2440 to asynchronous bus mode */mrc p15, 0, r1, c1, c0, 0orr r1, r1, #0xc0000000mcr p15, 0, r1, c1, c0, 0
#endif
2.3. 添加NAND启动代码
u-boot的smdk2410代码中默认为NOR启动,这里需要自行添加NAND启动代码。
找到源文件中NOR启动部分代码:
#ifndef CONFIG_SKIP_RELOCATE_UBOOT
relocate: /* relocate U-Boot to RAM */adr r0, _start /* r0 <- current position of code */ldr r1, _TEXT_BASE /* test if we run from flash or RAM */cmp r0, r1 /* don't reloc during debug */beq stack_setupldr r2, _armboot_startldr r3, _bss_startsub r2, r3, r2 /* r2 <- size of armboot */add r2, r0, r2 /* r2 <- source end address */copy_loop:ldmia r0!, {r3-r10} /* copy from source address [r0] */stmia r1!, {r3-r10} /* copy to target address [r1] */cmp r0, r2 /* until source end addreee [r2] */ble copy_loop
#endif /* CONFIG_SKIP_RELOCATE_UBOOT */
更改为:
#ifndef CONFIG_SKIP_RELOCATE_UBOOT
relocate: /* relocate U-Boot to RAM */adr r0, _start /* r0 <- current position of code */ldr r1, _TEXT_BASE /* test if we run from flash or RAM */cmp r0, r1 /* don't reloc during debug */beq stack_setup
#if defined(CONFIG_NOR_BOOT)ldr r2, _armboot_startldr r3, _bss_startsub r2, r3, r2 /* r2 <- size of armboot */add r2, r0, r2 /* r2 <- source end address */
copy_loop:ldmia r0!, {r3-r10} /* copy from source address [r0] */stmia r1!, {r3-r10} /* copy to target address [r1] */cmp r0, r2 /* until source end addreee [r2] */ble copy_loop
#elif defined(CONFIG_NAND_BOOT)ldr sp, =0x1000 /* setup stack to 4k temporarily to call the c function nand_read_ll*/bl nand_init_ll /* initialize nand flash */ldr r0, _TEXT_BASE /* destination for u-boot relocation */ldr r1, =0x0 /* source address in NAND */ldr r2, =0x40000 /* length to read from NAND to SDRAM, 256K */bl nand_read_ll /* call nand_read_ll to relocate u-boot */
#endif
#endif /* CONFIG_SKIP_RELOCATE_UBOOT */
2.4. 小结
到此为止,start.S的所有代码均已修改完毕。
3. 说明
最后一部分涉及到nand_init_ll和nand_read_ll两个函数,网上关于NAND启动中使用的这两个C代码有很多,但博主下载之后均报错。最后横下一条心,根据韦东山大神的NAND裸机程序修改了一版,效果不错。
下一篇博文将对这两个函数及相关设置进行充分说明。
友善之臂最新版mini2440学习笔记——u-boot 1.1.6移植(一)相关推荐
- 友善之臂mini6410开发板学习笔记
接口布局如下: 开发板与PC机连接
- 【黑马程序员新版Linux学习笔记】Linux系统实用操作命令——操作演示
[黑马程序员新版Linux学习笔记]Linux 零基础快速入门: (一)Linux基本命令--操作演示 (二)Linux用户和权限 -- 操作演示 (三)Linux 小技巧快捷键 (四)Linux系统 ...
- 【LVGL】学习笔记--(1)Keil中嵌入式系统移植LVGL
一 LVGL简介 最近emwin用的比较烦躁,同时被LVGL酷炫的界面吸引到了,所以准备换用LVGL试试水. LVGL(轻量级和通用图形库)是一个免费和开源的图形库,它提供了创建嵌入式GUI所需的一切 ...
- 移植u-boot1.1.6到友善mini2440学习笔记之环境搭建(系列之一)
前记:两年前就想学习ARM,由于一些原因耽搁了下来.如今迫于找硬件岗位工作的压力,不得不硬着头皮学习ARM,以前就知道ARM入门是计较困难的,如今真是体会深切啊,全是心酸泪,不仅自己的无知跟自己作对, ...
- 友善之臂中的mini2440 GPIO相关函数操作
在mini2440的驱动中,如果要对GPIO进行相关功能的配置和数据的写入获取,需要直接对相应的寄存器进行操作,其中使用的函数有: mini2440中端口号的形成可以使用下边的宏: S3C2410_G ...
- 小甲鱼python(2019最新版)学习笔记(P3-P8)
P3:设计小游戏 """用python设计第一个游戏"""temp = input("不妨猜一下小甲鱼现在心里想的是哪个数字:&q ...
- JAVA学习笔记JEECG BOOT介绍
JEECG JEECG BOOT 低代码开发平台(前后端分离版本) 当前最新版本: 3.1.0(发布日期:2022-03-01) AUR GitHub stars GitHub forks 项目介绍: ...
- 学习笔记-Spring Boot 开发 RESTful Web API(一)
题记: 本篇是Spring Boot 开发学习系列中基础知识学习的一部分,为 RESTful Web API 相关基础知识,为实践操作奠定理论基础. REST不是一个标准,而是一种软件应用架构风格.基 ...
- Spring Boot学习笔记——Spring Boot与ActiveMQ的集成
Spring Boot对JMS(Java Message Service,Java消息服务)也提供了自动配置的支持,其主要支持的JMS实现有ActiveMQ.Artemis等.这里以ActiveMQ为 ...
- SpringCloud学习笔记015---Spring Boot集成RabbitMQ发送接收JSON
在Spring Boot 集成RabbitMQ一文中介绍了如何集成RabbitMQ.默认情况下发送的消息是转换为字节码,这里介绍一下如何发送JSON数据. ObjectMapper 最简单发送JSON ...
最新文章
- 模糊数学笔记:六、模糊模型识别-I(最大隶属度原则)
- html贪吃蛇自动走,分享一个用html5实现的贪吃蛇特效代码
- Gossip数据传播协议
- 暖通lisp快捷键_CAD 快捷键一览
- 4.2 算法之数论 185 反正切函数的应用 python
- BootStrap笔记-栅格系统
- Python_爬虫_案例汇总:
- 【通告更新】Apache Tomcat服务器文件包含漏洞安全风险通告第三次更新
- STL源码剖析-vector
- 大学生计算机考试题题库,大学生统考计算机一级考试试题题库(供参考)
- 程序清单 8-8 exec函数实例,a.out是程序8-9产生的可执行程序
- 自己给打印机怎么加粉墨,联想兄弟打印机加粉步骤
- 2021三跨985重庆大学917计算机上岸经验分享
- Python学习之路,简单的注册登录小屁程序
- Oracle的Replace函数与translate函数详解与比较
- kali liunx安装拼音输入法,必须成功,只需5步
- 商标复审成功率是多少?
- FPGA小技巧-左移右移实现
- Arduino用超声波测距模块HC-SR04获得精确测量值——误差数据的排除
- 华中科技大学有计算机科学与技术学院导师,华中科技大学计算机科学与技术学院导师简介-袁平鹏...
热门文章
- 网易易盾首席产品风控官imlolo分享对社交业务安全风控的认知和思考
- 新版标准日本语中级_第二十七课
- Java 结构化数据处理开源库 SPL
- 美团面试-2016校园招聘
- CodeForces128A - Statues 解题报告
- 5个最优秀的Java和C#代码转换工具
- Java如何实现阶梯字符型输出
- 线性代数【8】-1 线性方程组 - 非常重要的概念 - 三个基本的问题
- realtek没有禁用前面板_为什么HD声卡必须禁用前面板插孔检测前置耳机和麦克才可以有声...
- 软碟通 刻录linux光盘,使用UltraISO软碟通刻录光盘