s3c2440 移值u-boot-2016.03 第1篇 新建单板
目前除RC版外,最新的就是 u-boot-2016.03.tar.bz2 ,大概看了几个年份的u-boot 发现,现在 更像是 linux kernel 。有 menuconfig 。
对比2012年的版本,发现 原来在 start.S 中做的一些事情,被拆分了。 board 分的更加详细。
之前没有 J-LINK 根本无法烧写 NOR FLASH ,导致 u-boot 只能在 NAND FLASH 上,但是卡在 重定向这一处。用了点灯大法,串口调试,都不是很理想。
买了个J-LINKV9 ,一试,原来烧写,NOR FLASH 这么简单。
因为 u-boot 自带的 只有 2410 的 单板,而且是不支持 NAND FLASH 的。
现在开始新建 2440 的单板。大至流程,和编写,裸板程序比较相似。
1,初始化中断向量 (如果有需要的话)
2,关看门狗
3,初始化 PLL 设置 分频
4,初始化SDRAM 内存
5,执行 board_r 中的后续操作
在 NAND FLASH 上,也是和这个类似,区别在于, NAND FLASH 会有一个自动复制4K 到 SRAM 执行的过程,在这4K 里面,需要读出整个u-boot 放到
SDRAM 中,还要修改 链接地址----重向定的代码。如果有 Open-JAG 就更好了,就能知道是在哪一步出现问题。
具体修改哪些东西:
1, configs/smdk2410_defconfig 在上面修改也行,复制出来一份也行。
改名为 smdk2440_defconfig
修改内容为
CONFIG_ARM=y
CONFIG_TARGET_SMDK2440=y
CONFIG_SYS_PROMPT="SMDK2440 # "
# CONFIG_CMD_SETEXPR is not set
2, /board/samsung/smdk2410 文件夹 复制为 smdk2440
/board/samsung/smdk2440/smdk2410.c 改为
/board/samsung/smdk2440/smdk2440.c
/board/samsung/smdk2440/Makefile 修改内容
obj-y := smdk2440.o
obj-y += lowlevel_init.o
/board/samsung/smdk2410/Kconfig 修改内容
if TARGET_SMDK2440
config SYS_BOARD
default "smdk2440"
config SYS_VENDOR
default "samsung"
config SYS_SOC
default "s3c24x0"
config SYS_CONFIG_NAME
default "smdk2440"
endif
/include/configs/smdk2410.h 复制为 smdk2440.h
修改里面的 所有 2410 改为 2440
/arch/arm/Kconfig中 添加
source "board/samsung/smdk2440/Kconfig"
config TARGET_SMDK2440
bool "Support smdk2440"
select CPU_ARM920T
3, 试着 Make
修改 Make 添加
ARCH=arm
CROSS_COMPILE=arm-linux-
#执行
make smdk2440_defconfig
#make menuconfig 使用图型显示
基本上能用了,NAND FLASH 有点问题。
LDS u-boot.lds
LD u-boot
drivers/mtd/nand/built-in.o: In function `nand_init_chip':
/home/u-boot-2016.03/drivers/mtd/nand/nand.c:76: undefined reference to `board_nand_init'
arm-linux-ld: BFD (Sourcery G++ Lite 2008q3-72) 2.18.50.20080215 assertion fail /scratch/julian/lite-respin/linux/obj/binutils-src-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu/bfd/elf32-arm.c:9537
arm-linux-ld: BFD (Sourcery G++ Lite 2008q3-72) 2.18.50.20080215 assertion fail /scratch/julian/lite-respin/linux/obj/binutils-src-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu/bfd/elf32-arm.c:9771
Segmentation fault
make: *** [u-boot] Error 139
去掉 网卡 USB 不需要的文件系统, NAND RTC 等后,重新编译,直到无错。
(最后会发布补丁)
编译成功 , 这当然是不能使用的,因为内存参数配置不对
-rw-r--r-- 1 root root 191068 2016-05-09 09:17 u-boot.bin
-rw-r--r-- 1 root root 9633 2016-05-09 09:17 u-boot.cfg
-rw-r--r-- 1 root root 1288 2016-05-09 09:17 u-boot.lds
-rw-r--r-- 1 root root 206425 2016-05-09 09:17 u-boot.map
-rw-r--r-- 1 root root 191068 2016-05-09 09:17 u-boot-nodtb.bin
-rw-r--r-- 1 root root 549400 2016-05-09 09:17 u-boot.srec
-rw-r--r-- 1 root root 57927 2016-05-09 09:17 u-boot.sym
5, 修改内存配置参数 及 启动流程分析
/arch/arm/cpu/arm920t/start.S
修改 时钟初始化
/* 设置分频参数 */
ldr r0, =CLKDIVN
mov r1, #0x05; /* FCLK:HCLK:PCLK=1:4:8 */
str r1, [r0]
/* 如果HDIVN非0,CPU的总线模式应该从“fast bus mode”变为“asynchronous bus mode” */
mrc p15, 0, r1, c1, c0, 0 /* 读出控制寄存器 */
orr r1, r1, #0xc0000000 /* 设置为“asynchronous bus mode” */
mcr p15, 0, r1, c1, c0, 0 /* 写入控制寄存器 */
/* 配置时钟 */
#define S3C2440_MPLL_400MHZ ((0x5c<<12)|(0x01<<4)|(0x01))
ldr r0, =0x4c000004
ldr r1, =S3C2440_MPLL_400MHZ
str r1, [r0]
调用 lowlevel_init
/board/samsung/smdk2440/lowlevel_init.S
修改内存配置参数
/board/samsung/smdk2440/smdk2440.c
中有 board_early_init_f 中初始化了 PLL
而它又是在 board_r.c 中被调用,太靠后了。
所以放到 start.S 中,这样加快了速度,因为SDRAM 初始化的时序是按 HCLK 100M 计算的,也必须在初始化 SDRAM 之前配置好时钟。
所以就取消 board_early_init_f 中的 Mpll 的设置 。
重新 清理 编译, 无错。 使用 J-LINK 烧到 NOR FLASH 上面,试机。
生成反汇编
arm-linux-objdump -D u-boot > u-boot.dis

s3c2440 移值u-boot-2016.03 第1篇 新建单板的更多相关文章
- s3c2440 移值u-boot-2016.03 第6篇 支持mtd yaffs 烧写
1, 解决启动时的错误 Warning - bad CRC, using default environment 搜索发现 在 /tools/env/fw_env.c 中 /* 放在NAND FLAS ...
- s3c2440 移值u-boot-2016.03 第2篇 支持Nand flash启动
1, 要求:在4K 的代码以内,完成 NOR NAND 类型判断,初始化 NAND 复制自身到 SDRAM ,重定向. 2, 在 /arch/arm/cpu/arm920t/ 文件夹里 添加一个 in ...
- s3c2440 移值u-boot-2016.03 第4篇 支持NAND flash 识别
1, /include/configs/smdk2440.h 中添加 #define CONFIG_CMD_NAND 编译 drivers/mtd/nand/built-in.o: In functi ...
- s3c2440 移值u-boot-2016.03 第3篇 支持Nor flash 识别
当选择,NOR flash 启用时,才可以访问 NOR FLASH ./common/board_r.c 364 line:initr_flash()flash_size = flash_init() ...
- s3c2440 移值u-boot-2016.03 第5篇 支持dm9000 识别
1, 通过查看 /drivers/net/Makefile 发现想要编译上,需要添加宏 /include/configs/smdk2440.h 中添加 #define CONFIG_DRIVER_DM ...
- s3c2440 移值新内核 linux-4.1.36
arm-linuxgcc version 4.3.2 经过试验,最高可以编译到 linux-4.1.36 ,在高的版本会有错误 ,可能是 GCC 编译器版本较低造成. 解压比较麻烦还要装一个 xz x ...
- “耐撕”团队 2016.03.24 站立会议
时间: 2016.03.22 17:00-17:30 18:30-19:00 成员: Z 郑蕊 * 组长 (博客:http://www.cnblogs.com/zhengrui0452/), ...
- 移值UCOS2到M4核与M3核的区别
之前移值过ucos2到stm32f2系列的单片机,这个单片机是属于arm的m3内核的.最近在学习永磁同步电机的控制,对于这个电机的控制,有比较多的数学计算,甚至于还有浮点的运算.所以用到了stm32f ...
- dotnet core 在 MIPS 下的移值进度
本文仍处于修订中 写在开始前 我们的主要业务基于 dotnet core 2.x 与 3.1 完成,目前 dotnet core 3.1 支持的 CPU 架构列表中还不包含龙芯,且在 gitlab i ...
随机推荐
- LabVIEW如何将脚本插入Quick Drop
问题:如何将自己设计的LabVIEW脚本做成快捷键的方式,实现效果如下 解决: 第一步:在LabVIEW Data中新建Quick Drop Plugins 第二步 在文件夹下新建一个VI,VI接口的 ...
- c#语句 for循环嵌套
1.打印三角形. 1) 方法一.for嵌套 方法二.只用一个for 2)倒三角 3)后三角 2.求100以内质数的和. 3.一张纸厚度为0.01米,至少对折多少次才能达到珠峰的高度?(用for死循环) ...
- [转]linux援救模式:linux rescue使用详细图解
网上很多网友问怎么进rescue 模式,不知道怎么用rescue来挽救系统. 现在我来图解进入rescue (示例系统为RHEL 3) 1.用安装光盘或者硬盘安装的方式进入安装界面,在shell 中 ...
- 【ionic】微信表情设置教程
NO.0 前提你的下载我的App :超级逗表情 Andorid:http://fir.im/chaojidbq Ios:https://github.com/apanly/chaojidbq (源码, ...
- spring 以Ant Build方式运行build.xml文件,报warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds 的解决办法
Buildfile: F:\experience\spring_pdf\sourcecode\example1\build.xml compile: [javac] F:\experience\spr ...
- C++程序设计(一)
1. 函数指针 程序运行期间,每个函数都会占用一段连续的内存空间.而函数名就是该函数所占内存区域的起始地址(也称"入口地址").我们可以将函数的入口地址赋给一个指针变量,使该指针变 ...
- 利用vs2013简单初探Python
最近无聊,某天无意在vs2013上发现了Python...... Python介绍:可以自己搜索一下. 接下来,准备工具: Win7搭建开发环境.需要准备Python.PTVS2013. 1.http ...
- 《奥威Power-BI智能分析报表制作方法》精彩回顾
年的最后一个月,一年又快过去.工作和学习都不能耽误,本周三奥威公开课又如约与大家见面咯!不知老师教的图文报表在课后你们都有练习吗?趁热打铁,我们现在再次来温习一下吧. 本期分享的内容:<奥威Po ...
- [SLAM]2D激光线特征提取
Nguyen, V., et al. (2007)."A comparison of line extraction algorithms using 2D range data for i ...
- HTML5本地存储之localStorage
存入本地中:localStorage.setItem('Code',‘10001’) 获取:localStorage.getItem('Code')