完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>
JZ2440学习笔记
Chili
2015.5
前言
本人入手
JZ2440
半个月,以前未接触过
linux
,但在校接触过许多不跑
linux
系统的
CPU
,具有
LPC1114
,
LPC1343
,
STM32
,
blackfin
等处理器的编程经验,对微处理器的原理以及运行方式具有一定的了解。靠着这点小经验,以及新学习的知识,自己动手移植了最新的
uboot
,绝对原创,得益于韦老师的书籍以及开发板,能让我们这个小白可以踏进
linux
的世界,但本人毕竟在
linux
方面只是个类似小白的学生,许多不对之处,希望大家不吝指教!
说明
:阅读本文需要一点的ARM以及S3C2440的基础知识,建议先阅读《嵌入式Linux应用开发完全手册》,此书对对ARM以及JZ2440有很好的介绍和说明,在阅读中有不懂的也可以再去翻看此书,查漏补缺。
JZ2440移植最新u-boot-2015.04-rc4.tar 1,配置uboot
去官网下载最新
uboot
源代码
u-boot-2015.04-rc4.tar
,开发环境采用
JZ2440
光盘上的
vmware
虚拟机
ubuntu9.10
。
本次采用
smdk2410
的默认配置来配置
uboot
,然后启动类似
linux
一样的
menuconfig
菜单进行配置,然后
make
,并烧写进
JZ2440
看效果,然后根据现象一步步修改。
我们移植
uboot
的基本原则是:因为我们刚上手
,
可能什么都不知道,更加不知需要更改什么,这个时候我们就先尽量什么都不改,直接烧写进去看现象,然后根据现象或者提示信息一步步更改,从而移植完成。
配置命令如下:
book@book-desktop:~/uboot/u-boot-2015.04-rc4$ tar jxvf u-boot-2015.04-rc4.tar.bz2
book@book-desktop:~/uboot/u-boot-2015.04-rc4$ cd u-boot-2015.04-rc4/
book@book-desktop:~/uboot/u-boot-2015.04-rc4$ make smdk2410_defconfig
book@book-desktop:~/uboot/u-boot-2015.04-rc4$ make menuconfig
3,在uboot根目录执行
book@book-desktop:~/uboot/u-boot-2015.04-rc4$ make
报错:
cc1: error: bad value (armv4) for -march= switch
cc1: error: bad value (armv4) for -mtune= switch
make[2]: *** [include/autoconf.mk] Error 1
make[1]: *** [silentoldconfig] Error 1
make: *** No rule to make target `include/config/auto.conf', needed by `include/config/uboot.release'. Stop.
错误并不可怕,学会看错误提示,根据提示进行下一步工作。错误提示意思好像是说机器平台不对,那么我们就来指定,打开顶层
Makefile
,指定交叉编译器和架构平台:
book@book-desktop:~/uboot/u-boot-2015.04-rc4$ vim Makefile
如图所示添加下面两行:
ARCH=arm
CROSS_COMPILE=arm-linux-
完成后,再次执行:
make
开始编译
book@book-desktop:~/uboot/u-boot-2015.04-rc4$ make
报错:
AS arch/arm/lib/vectors.o
AS arch/arm/lib/crt0.o
AS arch/arm/lib/relocate.o
arch/arm/lib/relocate.S: Assembler messages:
arch/arm/lib/relocate.S:50: Error: selected processor does not support `bx lr'
make[1]: *** [arch/arm/lib/relocate.o] Error 1
make: *** [arch/arm/lib] Error 2
耐着性子认真看错误信息,说不支持bx lr指令,这是arm的一个跳转指令,没理由arm交叉编译器不支持啊,是不是版本太低了?
查看版本:
arm-linux-gcc -v
版本为3.4.5,
貌似
JZ2440
光盘上的
ubuntu
上自带的交叉编译环境是比较老了,那我们网上搜索个新的,装上试试看。
在”
h t p : / / dl.dbank.com / c01p81pb9i“网站有arm-linux-gcc 4.4.3
下载,并有详尽的安装方法,读者可自行下载并安装。安装完成后查看版本如下,说明安装成功。
2,编译
在
arm-linux-gcc 4.4.3
的基础上进行
uboot
编译:
book@book-desktop:~/uboot/u-boot-2015.04-rc4$ make
接下来就是一路编译成功,并生产
uboot.bin
等映像文件。
3,烧写默认配置的uboot
由于
JZ2440
配有
Jlink
,
Jlink
一般来说不支持烧写
nand falsh
,当然可以购买百问网的
Gflash
,其可以通过
Jlink
烧写
nand flash
。我们一般是购买
JZ2440
标准配置开发板,那咱就用
nor flash
启动,并通过
Jlink
的
J-Flash
将
uboot.bin
烧写进
nor flash
,重启,观察串口输出。
Ps
:安装 学前班
J-linkUSB-ICE,
安装完后打开
J-Flash,
打开 开发板资料
如何烧写
S3C2440
裸板程序
s3c2440.jflash
工程,打开刚编译成功的文件
uboot.bin
,按下
F5
开始编程。
重启开发板,串口无任何现象,说明默认的
smdk2410.h
的配置还是不适用与我们现在
JZ2440
的板子。好了接下来开始一点点修改
uboot
了。
4,修改uboot支持JZ2440串口
4.1 修改uboot时钟配置
串口没有输出的话,首先想到的肯定是时钟没有配置好,好的,有想法立即就去试试。
相信看过韦老师的《嵌入式
Linux
应用开发完全手册》,应该知道
S3C2440
和
S3C2410
时钟计算法不一样,因此我们打开
smdk2410.c
,修改初始化函数中的时钟配置。命令如下:
book@book-desktop:~/uboot/u-boot-2015.04-rc4$ vim board/samsung/smdk2410/smdk2410.c
修改如下:
1
,将时钟宏更改如图
#define M_MDIV 0x5c
#define M_PDIV 0x1
#define M_SDIV 0x1
2 ,修改 int board_early_init_f(void) 函数添加 CLKDIVN 寄存器配置
如下:
writel(0x5, &clk_power->clkdivn);
保存,并编译,烧写,重启开发板查看现象:
分析:有打印乱码数据,说明板子至少在工作,只是波特率设置不正确,下面看串口波特率在哪里设置,并进行修改就可以了。
4.2 修改串口驱动
我们在sourceInsight
中根据韦老师开发手册书籍上的说明,按
uboot
执行的流程一步步查找uboot
串口初始化函数,最后发现在
u-boot-2015.04-rc4u-boot-2015.04-rc4-my2440driversserialserial-s3c24x0.c
中
serial_init_dev(const int dev_index)函数完成串口初始化,调用stati_serial_setbrg(const int dev_index)设置波特率,设置波特率时的获取时钟函数如下:
ulong get_HCLK(void)
{
struct s3c24x0_clock_power *clk_power = s3c24x0_get_base_clock_power();
#ifdef CONFIG_S3C2440
switch (readl(&clk_power->clkdivn) & 0x6) {
default:
case 0:
return get_FCLK();
case 2:
return get_FCLK() / 2;
case 4:
return (readl(&clk_power->camdivn) & (1 << 9)) ?
get_FCLK() / 8 : get_FCLK() / 4;
case 6:
return (readl(&clk_power->camdivn) & (1 << 8)) ?
get_FCLK() / 6 : get_FCLK() / 3;
}
#else
return (readl(&clk_power->clkdivn) & 2) ? get_FCLK() / 2 : get_FCLK();
#endif
}
说明现在的
uboot
已经支持获取
s3c2440
的时钟来自行计算波特率了,但需要我们在配置文件
smdk2410.h
中定义
s3c2440
的宏。因此我们就去配置:
book@book-desktop:~/uboot/u-boot-2015.04-rc4$ vim include/configs/smdk2410.h
修改如下:
保存,现在串口应该就可以用了,我们
make下
book@book-desktop:~/uboot/u-boot-2015.04-rc4$ make
编译成功并生产uboo.bin,烧写进nor flash,重启开发板,打印如下,说明串口可用了。
|
|
相关推荐
|
|
852 浏览0 评论
1128 浏览1 评论
如何配置Linux操作系统设备树让我的开发板可以将板子上的GPIO接口用作 I2S输出??
2018 浏览1 评论
1556 浏览0 评论
2100 浏览0 评论
小黑屋|手机版|Archiver|德赢Vwin官网(湘ICP备2023018690号)
GMT+8, 2024-8-23 07:08, Processed in 0.694145 second(s), Total 70, Slave 53 queries .
Powered by德赢Vwin官网 网
© 2015bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号