移植Samsung uboot


在编译uboot成功之后,烧录到板子里。

第一个问题 PMIC

在烧录进板子里后,通过串口连上板子观察板子的信息;
在这里插入图片描述
板子启动,灯亮了,供电锁存了,但是串口并没有信息,所以我们确定了需要修改的大致范围在 start.S 中我们做了中断处理、设置状态寄存器cpsr、设置cache、mmu、确定启动介质sd/nand。
然后调用lowlevel_init。这个函数是对一些底层的东西进行初始化。
首先是 压栈,在我们调用lowlevel_init时我们不确定或者确定要再调用函数时,就需要压栈。因为阿巴阿巴阿巴;
检测复位状态,冷启动热启动;
IO状态恢复
关看门狗
供电锁存(重点)
PMIC(电源管理IC) (问题出处)
初始化时钟
初始化DDR
初始化串口(重点)
然后大致的范围就确定好了。
因为我们所以值得板子里并没有PMIC芯片,所以我们把这个PMIC跳转语句注释掉。
在这里插入图片描述

编译烧录。
在这里插入图片描述
看启动信息,CPU是没什么问题的、serial、board也没问题
DRAM:1G 有问题。
SD/MMC 有问题;SD卡初始化失败了
NAND 板子里没有装NAND,所以为0。

第二个问题 DDR

名字

在lib_arm/board.c
在这里插入图片描述

位置在board/samsung/smdkc110/lowlevel_init.S
修改是名字
在这里插入图片描述
在这里插入图片描述

DDR的start和size

在这里插入图片描述
通过 bdinfo 命令来查看DRAM的信息。
在通过 md 命令 md 20000000 10
确定DDR是否能使用,能使用的话说明DDR的初始化是没有问题的。
DRAM的start是可以通过软件改变的;size 应该为10000000。
在这里插入图片描述

将DDR端口0地址配置为30000000

(smdkv210single.h)
要修改DDR的地址需要三个地方

1 设置MEMCONFIG_0 寄存器为0x30F01323

	板子里边与DDR相关的寄存器 MEMCONFIG_0 的设置 	0x30F01323
	30 指的是 起始地址为 0x30000000  	F0 指的是 DDR大小的补码(大小为 0FFF_FFFF  256M )
	![在这里插入图片描述](https://img-blog.csdnimg.cn/1f43894e7ea14def9f506262a00a18d0.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5oao5oaoQA==,size_20,color_FFFFFF,t_70,g_se,x_16)

2 在软件显示的DDR的起始地址,size ,start。

在这里插入图片描述

3 修改DDR1的地址映射

从start.S 开始找 _mmu_table_base 指针
在这里插入图片描述
找到定义处
在这里插入图片描述
在 smdkc110 中的lowlevel_init.S
请添加图片描述

编译 烧录


这个时候又出现了一个问题SD/MMC: 没有反应

第三个问题 SD/MMC

SD/MMC: 没有反应 ;这说明在打印SD/MMC:之后的代码出现了问题;然后在打印SD/MMC的信息之前。所以我们在这个范围内寻找。

打印MMC的代码在lib_arm/board.c中

在这里插入图片描述
打印SD/MMC信息是在mmc_initialize函数中,
在这里插入图片描述
然后在排查,因为在我们没有修改之前是可以启动的,在修改DDR的起始地址之后就出问题了,
所以问题是和内存相关的(也可以使用断点排查)

配置文件smdkv210single.h

在这里插入图片描述

配置文件smdkc110/smdkc110.c

请添加图片描述

编译烧录

在这里插入图片描述
能工作,但是SD/MMC还是有有问题;这个时候我们不知道错误在哪里,就在source insight 里错误代码中的关键字如 EXT_CSD 。

第四个小问题

查找 EXT_CSD

经过查看上下文
因为版本的问题这份uboot中不支持高版本的SD。所以我们可以跳过或解决这个问题。ext_csd_struct 里边存放了SD的版本,通过修改if语句的判断值,就该为 8,原来为5.
在这里插入图片描述

编译烧录

在这里插入图片描述

第五个小问题 串口

如何修改 串口在这里插入图片描述
已修改到串口0上

位置include/s5pv210.h

在这里插入图片描述

串口的初始化在lowlevel_init.S中

在这里插入图片描述

第六个小问题 修改默认的网络地址和提示符

1 网络地址

修改配置头文件smdkv210single.h中的CONFIG_IPADDR等宏,则可以修改uboot的默认环境变量

在这里插入图片描述
如果说修改了还是没反应,那应该是INAND中的ENV分区已经保存了一份环境变量。所以要擦除那份才能看到现象。
mmc write 0 30000000 11# 32
(表示将DDR的0x30000000开头的一段内存中的内容写入iNand中的第17个扇区开始的32个扇区内,写入长度是32个扇区长度(16KB))

2 提示符

修改配置头文件smdkv210single.h
在这里插入图片描述

第七个问题 网卡DM9000

查找与网卡相关的配置代码

在cpu/s5pc11x/start.S
start_armboot 函数
请添加图片描述
在lib_arm/board.c 中
init_sequence 是个结构体
请添加图片描述
在 lib_arm/board.c
board_init
请添加图片描述

在 board\samsung\smdkc110\Smdkc110.c
dm9000_pre_init 函数
请添加图片描述board\samsung\smdkc110\Smdkc110.c请添加图片描述

修改配置文件

请添加图片描述

寄存器 MP01CON_REG

通过查看引脚图发现,37硬件接的是CSn1,所以得连接相对应的位;这里我面配置的是bit4~bit7。

在这里插入图片描述

请添加图片描述

寄存器 SROM_BW

通过查看引脚图发现,37硬件接的是CSn1,所以得连接相对应的位;这里我面配置的是bit4~bit7,都配置成1 1 1 1
CSn1 是什么?是DM9000接在内存的什么地方。这里接的是BANk1

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

寄存器 SROM_BC1

没啥好说的

在这里插入图片描述
在这里插入图片描述
修改配置文件里跟DM9000相关的信息
请添加图片描述
#define CONFIG_DM9000_BASE (0x88000300)
一开始我们设置的是0x88000000,但是在调试的时候网卡没有启动成功。
为什么是0x8800呢,因为DM9000接在bank1上,bank1 的起始地址就是0x88000000。

#define DM9000_DATA (CONFIG_DM9000_BASE+4)
在这里插入图片描述
查看我们的CMD引脚,接在了ADDR2;所以我们就加上4(0b100)对应第2位。

第八个问题 移植完了启动不了内核

大致有可能是这几个问题

机器码

如果说机器码和内核里边的机器码对不上,就会启动不起来。![请添加图片描述](https://img-blog.csdnimg.cn/63ccfe6feb1649f7adbf40f55db42ca5.png)

串口

如果说,当我们启动内核后看不到信息,有可能是内核里的串口和uboot中的串口不一致,导致信息输出到了另一个串口上了。请添加图片描述

参数

请添加图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值