s3c2440 移值u-boot-2016.03 第1篇 新建单板

发布者:Xiangsi最新更新时间:2023-09-04 来源: elecfans关键字:s3c2440 手机看文章 扫描二维码
随时随地手机看文章

目前除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 引用地址:s3c2440 移值u-boot-2016.03 第1篇 新建单板

上一篇:s3c2440 移值u-boot-2016.03 第2篇 支持Nand flash启动
下一篇:编译busybox-1.24.1 制作文件系统

推荐阅读最新更新时间:2024-11-06 07:02

移植QtEmbedded 4.6.3 tslib1.4 到 S3C2440
1、下载源码包: 到QT官网下载最新版 QT FOR EMBEDDED 下载最新版 tslib1.4 2、配置交叉编译环境 下载交叉编译工具 arm-linux-gcc 4.3.2 (交叉编译工具的版本,请根据开发板中系统内核编译时使用的版本进行确定,我使用的mini2440内核采用此版本交叉编译器编译所以选用此编译器) 在命令行模式下执行 export PATH=/usr/local/arm/4.3.2/bin:$PATH 建议写成脚本setcrossenv.sh方便以后执行 3、交叉编译tslib1.4 A、安装编译过程需用到的程序 root@hrixin-desktop:/home/hrixin # apt
[单片机]
ARM S3C2440 时钟初始化流程
1.设置lock time 2.设置分频系数 3.设置CPU到异步工作模式 4.设置 FCLK 了解 芯片的时钟原理图,以及寄存器的作用 了解芯片的晶振频率,锁相环,分频系数,以及有哪些时钟
[单片机]
在VIM中的嵌入式软件调试
  引言   GNU免费提供了一整套工具链,为嵌入式Linux程序的开发和调试提供了完整的支持。其强大的gdb调试工具可以方便地对嵌入式平台上的程序进行跟踪调试;而Linux下强悍的VIM编辑器,不仅可以方便地调用make文件对代码进行编译,而且通过脚本的配置还可轻松地成为高效的代码编辑环境。流传着这样一种说法,“世界上的程序员分三种,一种使用Emacs,一种使用VIM,剩余的是其他。”不去辩论这句话的对与错,单纯从字面意义上来理解,也足见VIM的魅力了。因此,在VIM中实现对嵌入式软件的调试,我们便得到了一个高效、稳定的嵌入式Linux的开发环境。   1 gdb对嵌入式软件的调试模式   许多非Linux的嵌入式系统已经
[单片机]
在VIM中的嵌入式软件调试
(6)s3c2440用I2C接口访问EEPROM
在前面阅读理解了I2C的官方协议文档后,就拿s3c2440和EEPROM来验证一下. 本来是想用s3c2440的SDA和SCL管脚复用为GPIO来模拟的,但在没有示波器的情况下搞了一周,怎么都出不来,最后还是放弃了.甚至参考了linux下i2c-algo-bit.c和i2c-gpio.c,依然没调出来.如果有示波器,可能很快就能找到原因,现在完全不知道问题出在哪里.其实想用GPIO模拟I2C的目的很简单,以一种简单而又深刻的方式来理解I2C. 既然这条路暂时没法走,退而求其次,用s3c2440的I2C接口来访问EEPROM,只要按照datasheet的来做,基本上不用考虑时序咯. 从s3c2440和AT24
[单片机]
(6)<font color='red'>s3c2440</font>用I2C接口访问EEPROM
S3C2440芯片时钟配置
S3C2440A芯片中的时钟控制逻辑可以生成所需的时钟信号,包括用于CPU的FCLK、AHB (Advanced High-performance Bus) 总线外围设备的HCLK,以及APB (Advanced Peripheral Bus)总线外围设备的PCLK。S3C2440A有两个相锁循环(PLLs):一个用于FCLK、HCLK和PCLK,另一个用于USB块(48 Mhz)。时钟控制逻辑可以使用无PLL的慢时钟,并且可以通过软件控制决定将时钟是否连接到外围块,这将减少芯片的功耗。 1 时钟源的选择 S3C2440A芯片的时钟来源有两个,一个是外部晶振(XTIpll 和 XTOpll),一个来自外部时钟输入(EXTC
[单片机]
<font color='red'>S3C2440</font>芯片时钟配置
S3C2440 热拔插驱动 修改mdev配置支持U盘自动挂载(三十三)
1、当我们每次插入U盘后,都会自动创建U盘的设备节点/dev/sda%d 这是因为里面调用了device_create()实现的,busybox的mdev机制就会根据主次设备号等信息,在/dev目录下创建设备节点,如下图所示: 而想使用上面的sda1设备节点,读写数据时,还需要使用mount /dev/sda1 /mnt来挂在U盘才行,会显得很麻烦,如下图所示: 2、其实,可以在/etc/mdev.conf文件里加入一行语句就能实现自动装载u盘,也可以在里面干其他与设备节点相关的事 2.1 而/etc/mdev.conf又是什么? 它是属于mdev的一个配置文件,而mdev之前就讲过了,它主要的功能是管理/de
[单片机]
<font color='red'>S3C2440</font> 热拔插驱动  修改mdev配置支持U盘自动挂载(三十三)
分析NOR Flash时序(S3C2440)
S3C2440的存储器控制器的可编程访问周期的时序为: 上图中的时间参数(Tacc、Tacs、Tcoh等) 都是可编程设置的。 再看一下NOR Flash 的时序: 我们需要做的就是设置S3C2440的Nor Flash控制器(存储器控制器的BANK0)时序去满足Nor Flash芯片的时序。 每个参数的参考范围可以通过Nor Flash的AC CHARACTERISTICS(交流特性)得到。 结合Nor Flash芯片的两张图,可以得到如下信息: 发出地址数据(Addresses)后,要等待Taa(要求大于等于70ns)时间,地址数据才有效; 发出片选信号(CE#)后,要等待Tce(要求大于等于70ns)时间
[单片机]
分析NOR Flash时序(<font color='red'>S3C2440</font>)
S3C2440裸机------触摸屏_S3C2440触摸屏接口
1.触摸屏接口 分离的X Y转换模式是指逐个的转换X Y的坐标,它首先会启动X坐标的AD转换,转换成功之后数据会保存在ADCDAT0里面,同时会产生一个中断,在中断服务程序里面就可以把X坐标读出来了,然后可以启动Y坐标的转换, 转换成功之后,数据会保存在ADCDAT1里面,同时会产生一个中断,然后从寄存器里面把Y坐标读出来。 自动的X/Y坐标转换模式,你不需要单独的去读取X坐标或者Y坐标,可以通过设置寄存器,让他一次性的测试X和Y坐标。 等待中断模式(等待按下或者松开)。 2.触摸屏寄存器 2.1ADCCON寄存器 这个寄存器的 bit表示ADC转换是否结束,然后下面是设置时钟, 是选择输入通道,后面我们使用自
[单片机]
<font color='red'>S3C2440</font>裸机------触摸屏_<font color='red'>S3C2440</font>触摸屏接口
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved