注:以下内容来自朱老师物联网课件
1. 移植前的准备工作
1.1 获取三星移植过的uboot源代码
我们使用的是老师提供的android_uboot_smdkv210.tar.bz2,文件存储在课件2.3.零距离初体验uboot部分
1.2 SourceInsight准备
(1)移植的时候最重要的工作就是看代码、改代码然后编译运行测试。
(2)编译代码必须在linux中(windows共享文件夹中配置uboot不行的),那么看代码和改代码可以在linux中(vim、gedit)也可以在windows中(Sourceinsight)。
(3)我一般习惯的方式是:在windows中解压一份uboot源代码,在linux中也解压一份,注意这两份代码原始情况是一模一样的。然后移植的时候是在windows中这一份中去看代码、改代码;在linux中这一份去编译烧写。这种做法需要在windows中和linux中2份代码之间保持同步(直白点说就是windows中改过了后要把改过的源代码复制到linux中那一份去覆盖linux中那一份里面的同目录同文件)。
(4)问题来了,怎么在windows中和linux中同步代码?通过共享文件夹在linux中进行复制(cp /mnt/hgfs/winshare/xxx.c ./);通过一些专用工具,譬如sshsecureshell。
1.3 Ubuntu 上网
上网的方式有两种:NAT和桥接
我们要连接开发板的话就要使用桥接的方式
(1)虚拟机上网有2种模式,NAT和桥接。
(2)虚拟机上网配置要注意这几个地方:
第一个要注意选择NAT还是桥接模式;
第二个要注意ubuntu中网络配置文件/etc/network/interfaces,这个文件中是配置网卡信息的(譬如静态ip还是dhcp,静态ip地址是多少等);
如下为我的interfaces文件设置
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.1.109
netmask 255.255.255.0
gateway 192.168.1.1
第三个如果是桥接模式要注意桥接到哪个网卡上(一般笔记本都有2个网卡,一个是有线网卡一个是无线网卡),如果是NAT模式没关系。
(3)ubuntu14.04中重启网卡的命令变了。(ifdown eth0 ifup eth0)
(4)几种常见的上网配置过程
- 演示:NAT方式下上网配置过程。
前提是主机windows通过无线wifi上网了(或者windows通过有线上网也可以)。然后在虚拟机中配置2点:第一选择NAT方式,第二配置/etc/network/inerfaces文件中使用dhcp方式;然后重启网卡,确认ip地址得到后即可上网。 - 演示:桥接方式上网配置过程。
前提是主机windows通过无线wifi上网了(主机通过有线网卡上网的配置方式有不同)。然后虚拟机中配置注意三点:第一选择桥接方式,第二配置桥接到无线网卡(如果主机windows是通过有线上网的,则桥接到有线网卡);第三配置/etc/network/inerfaces文件中使用dhcp方式;然后重启网卡,确认ip地址得到后即可上网。 - 演示:虚拟机要ping通开发板的配置过程。
前提是开发板和电脑之间通过网线连接好。然后虚拟机中配置注意三点:第一选择桥接方式,第二配置桥接到有线网卡(如果配置为自动或者配置桥接到无线网卡则肯定无法ping通开发板);第三配置/etc/network/inerfaces文件中使用static方式,ip地址配置保证和主机windows、开发板三者处于同一网段;然后重启网卡,确认ip地址得到后即可ping通开发板。
(5)windows系统中有一个bug,如果windows没有检测到有线网卡连接了外部网络则windows中本地连接是不工作的,网卡不工作。解决方案是用网线随便连接一个有联网能力的东西即可,譬如网线连接你的电脑到旁边兄弟的电脑上,譬如插上你的开发板(开发板中运行了linux系统),譬如插上路由器端口。
1.4 文件传输工具SSH(secure shell)
SSH(Secure SHell)使用
第一步 :在windows中安装sshsecureshell客户端:找到SSHSecureShellClient-3.2.9.exe,直接按照一般Windows软件安装即可。
第二步: 在Ubuntu安装ssh服务器openssh-server
功能(让远程主机可以通过网络访问sshd服务,开始一个安全shell)
在Ubuntu下输入:sudo apt-get install openssh-server,出现依赖问题可参考------>ubuntu安装openssh-server 报依赖错误的解决过程
注意: 获取依赖的版本时你的Ubuntu必须是联网下载的,为了在线获取对应的版本,
提示了系统中openssh-client被降级后,这样再安装openssh-server就可以了。
第三步: 在Windows中登录Ubuntu ,点击Quick Connect ,然后输入Ubuntu的IP地址和用户名,选择登录方式,登录。
如果出现登录不上,让你重复输入密码,或者普通用户可以登录,但是root用户就是不行,可以参考如下文档进行设置(主要是sshd的默认配置设置)
【笔记】Ubuntu14.04解决ssh登录不上
1.5 secureCRT登录
在上一章节中我们在Ubuntu安装ssh服务器openssh-server已经安装成功,那么我们也可以使用我们的串口工具进行登录
2. 移植初体验
2.1 直接编译三星移植版uboot尝试运行
第一步:先将我们要移植的uboot拷贝到Linux下,解压。(实际操作)
第二步:在Windows中我们使用SI打开要移植的uboot对应的工程(方便查看)
第三步:首先我们查看Makefile中的交叉编译工具链是否和我们的匹配
我们在147行找到了配置文件,并且这个和我们实际是匹配的
CROSS_COMPILE = /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-
第四步:查找配置文件
虽然我们没有找到我们板子的S5PV210的配置文件,但是我们找到了相似的(2581~2583)
配置文件
smdkv210single_config : unconfig
@$(MKCONFIG) $(@:_config=) arm s5pc11x smdkc110 samsung s5pc110
@echo "TEXT_BASE = 0xc3e00000" > $(obj)board/samsung/smdkc110/config.mk
2.2 根据实际结果进行逐步修改
第一次尝试编译运行
现象:我们发现串口只输出:SD checksum Error ,没有OK输出,但是开发板电源置锁是正常的。
解决方案:我们顺着start.S 发现开发板置锁是在lowlevel_init(我们找到的是在smdkc110中)中,并且串口初始化也在这里面,如果正常就会输出‘O’,这样的话我们锁定了范围就在电源置锁之后,串口初始化之前,最后发现了bl PMIC_InitIp ,但是我们没有使用电源管理,所以这里直接屏蔽。
第二次尝试编译运行,显示如下的画面,并且卡在了NAND这个部分,;说明我们上一步已经成功解决,但又遇到了新的问题
问题1:DRAM显示信息出错,我们应该是512MB
问题2:SD/MMC fail
问题3:hang在NAND的部分
我们找到了配置文件:smdkv210single.h
修改了