X210v3S的BSP构建之uboot移植(一)

来源:互联网 发布:navicat linux 安装 编辑:程序博客网 时间:2024/05/29 11:41

本篇博客记录将uboot,kernel,rootfs及QT4.8+openCV移植到x210v3s开发板全过程,持续更新中.......

博主信息

中文名:疯仔

英文名:Swann Kang

坐标:天津(Tianjing)

时间:2017/12/03(大三)

Email:1159943540@qq.com

交流QQ:1159943540

淘宝店铺:疯仔嵌入式物联网科技


开发平台及软件版本介绍 

目标开发板:  x210v3s

CPU:      SAMSUNG S5PV210

资源:     512MB DDR2,4GB inand,DM9000,IIC显示屏等

UBOOT版本:1.3.4 android_uboot_smdkv210.tar.bz2

Kernel:   2.6.35.7

busybox:1.23

QT:4.8.5

开发环境:vmware12.0 +  64位 Ubuntu16.04 虚拟机

参考开发板:三星SMDKV210


开发环境搭建:

1.安装交叉编译工具链:arm-none-linux-2009q3

2.安装ssh服务器

3.


开始移植:

解压uboot源码

tar -jxvf android_uboot_smdkv210.tar.bz2

主makefile分析



TEXT_BASE 是将来我们整个 uboot 链接时指定的链接地址。因为 uboot 中启
用了虚拟地址映射,因此这个 C3E00000 地址就等于 0x23E00000(也可能是
33E00000具体地址要取决于 uboot中做的虚拟地址映射关系)。 
回顾裸机中讲的链接地址的问题,再想想 dnw 方式先下载x210_usb.bin 然后
再下载uboot.bin 时为什么第二个地址是 23E00000.



查看原理图



x210v3s在DRAM0和DRAM1的位置各接了256MB的DDR2内存

配置编译:

make  smdkv210single_config

make -j4

烧录运行:

檫除原uboot

安卓:busybox dd if=/dev/zero of=/dev/block/mmcblk0 bs=512 seek=1 count=1 conv=sync
 sync
LINUX:busybox dd if=/dev/zero of=/dev/mmcblk0 bs=512 seek=1 count=1 conv=sync
 sync

烧录uboot至sd卡

fdisk -l查看sd设备


启动:

错误分析:

1.未打印“OK“字样,说明在这之前已出错

uboot源码分析

找到uboot入口函数

u-boot.lds 中找到 start.S入口 
(1)在 C 语言中整个项目的入口就是 main 函数(这是 C 语言规定的),所以譬如
说一个有10000 个.c 文件的项目,第一个要分析的文件就是包含了 main 函数的
那个文件。 
(2)在 uboot 中因为有汇编阶段参与,因此不能直接找 main.c。整个程序的入口
取决于链接脚本中ENTRY 声明的地方。ENTRY(_start)因此_start符号所在的文
件就是整个程序的起始文件,_start所在处的代码就是整个程序的起始代码。



找到start.s


start.s解析


lowlevel_init.s解析


在uart_asm_init函数中打印‘o'


在这里打印’k'

经调试发现三星smdkv210开发板有PMIC的IIC电源管理,在这里没有,把118行 bl PMIC_InitIp注释,再重新编译运行


可以看到uboot已经启动,但启动内核失败

print打印环境变量,发现环境变量错误,bdinfo查看详细


重新设置环境变量

set bootcmd 'movi read kernel 30008000; movi read rootfs 30B00000 300000; bootm 30008000 30B00000'

set bootargs console=ttySAC2,115200 root=/dev/mmcblk0p2 rw init=/linuxrc rootfstype=ext3

SMDKV210 # set ipaddr 10.5.74.20

SMDKV210 # set serverip 10.5.74.81

SMDKV210 # set gatewayip 10.5.74.1

save

重新启动,发现环境变量无法保存,mmc驱动无法工作

SD/MMC:  unrecognised EXT_CSD structure version 7
unrecognised EXT_CSD structure version 7
Card init fail!
0 MB

从启动信息中发现关键信息,开发板inand版本高,uboot无法识别,把信息复制到source insight中搜索,定位问题

在/u-boot-samsung-dev/drivers/mmc/mmc.c中


把相应代码修改,这里直接注释err = -1和goto out 等

重新编译烧录


此时inand版本号的问题已解决,发现内核启动失,查看环境变量

使用命令md和mw进行内存读写测试


读写正常,说明DDR初始化成功,并且正常工作,但是不难看出,大小错了

x210v3s开发板中,实际在bank0上接了256MBDDR,地址为0x20000000到0x2fffffff,bank1中接了256MB内存,地址为0x40000000到0x4fffffff

修改代码

在include/configs/中的smdkv210single.h中


修改后make clean 再重新编译烧录


内存配置修改成功,尝试ping命令,发现网卡地址配置错了


在smdkv210single.h中修改配置

查看原理图




可知本发板的dm9000接在SROM BANK1上,起始地址为88000000,在头文件中修该配置如下


同时还有smdkc110.c中dm9000_pre_init函数


重新编译烧录运行


可以看到已经ping通,网卡正常工作

至此uboot已初步移植成功,接下来我们在uboot中修改Makefile等添加自己定义的开发板,


然后复制smdkc110文件夹为swann210文件夹

同时在include/configs/中复制smdkv210single.h为swann210.h

同时修改swann210文件夹下的u-boot.lds链接脚本


重新编译

接下来我们为开发板的uboot添加开机logo


原创粉丝点击