上节完成了平台端的环境搭建,我们的开发板端也要安装相应的服务。
bootloader 初始化硬件,然后加载内核 kernel 然后挂接根文件系统,然后启动我们的应用程序。
当然第一步是要下载我们的bootloader,可以使用j-link等进行烧写(不同板卡烧写方式不同),一般我们使用SD卡的方式进行烧写,SD卡需要制作成启动卡,制作方法可以百度。将我们的bootloader放入SD卡中,
关闭开发板电源,将拨码开关SW1调至(1000)(SD启动模式)
刚才做好的SD启动盘插入SD卡插槽
打开电源
然后烧到我们的flash中,之后就可以通过bootloader来进行更多的操作。
(u-boot的移植适配板卡后期详细说明)
boot烧写完成后,之后就可以从flash启动boot。拨号开关SW1 为0110 (从EMMC(FLASH的一种) 启动)
这个时候就可以通过串口查看到显示信息了。
如果没有打印信息,需要检查以下几个方面:
1. 连接串口线到板子的COM2口 //如果是用笔记本电脑的,需装usb转串口驱动(用360驱动大师在线装方便)
2. 确认拨号开关SW1 为0110 (从EMMC(FLASH的一种) 启动)
3. 检查 波特率设置, 流控设置
4. 可能为flash中u-boot被破坏了,切换到SD卡启动,重新烧写boot(SW1 改为1000)
https://blog.csdn.net/thisway_diy/article/details/77976776 可以参考韦东山老师的教程。
其实也是比较简单的,
------------------------
|板子 192.168.2.99 |
------------------------
------------------------
|电脑 192.168.2.100 255.255.255.0 192.168.2.1 | //做中转用,和板子虚拟机IP要在同一网段, 且不能和它们IP一样
------------------------
------------------------
|虚拟机 192.168.2.129 |
此时我们通过电脑ping 虚拟机时ping的通的,但是虚拟机ping电脑是ping不通的。
这里注意我们要关闭我们电脑的杀毒软件,并且关闭防火墙。
windows 防火墙 à 高级设置 à 入站规则,启动文件和打印机共享(ICMPv4-in 专用公用)
此时就可以ping通了。
电脑和虚拟机的IP设置完了,接着要设置板卡的IP了。
启动板子,快速按任意键停在boot处,设置u-boot 的环境变量
# setenv serverip 192.168.2.129 //注意它与虚拟机里 ubuntu 的ip要一致
# setenv ipaddr 192.168.2.99
# setenv gatewayip 192.168.2.1
# saveenv 保存设置
# pri /*查看设置后效果
# ping 192.168.2.129 //测试网络是否连通 ,注意在u-boot中, 它能ping电脑, 电脑不能ping它 //注意,要拔掉jtag线,否则ping 会重启
host 192.168.2.129 is alive //is alive 表示ok
通过help我们可以看到支持很多的命令,也可以更具需要进行添加。
1.使用tftp服务,实现内核的加载
tftp使用时,服务器ip要设置我们电脑的IP。
# setenv bootcmd tftp 41000000 uImage\;tftp 42000000 exynos4412-fs4412.dtb\;bootm 41000000 - 42000000 /* 设置tftp方式加载内核
setenv bootcmd 设置环境变量(自启动命令 bootcmd)
tftp 41000000 uImage\; 通过tftp从虚拟机/tftpboot目录下下载内核uImage到板子 的内存 41000000 处。\; 用于分割多个命令
tftp 42000000 exynos4412-fs4412.dtb 通过tftp下载设备树文件 exynos4412-fs4412.dtb 到板子的内存 42000000 处
bootm 41000000 - 42000000 启动内核(41000000处放的是内核uImage, 42000000处放的是设备树文件)
2.使用nfs服务,NFS根文件系统的挂载
首先启动虚拟机服务端的nfs服务。
虚拟机端cat /etc/exports 来查看路径。
#setenv bootargs root=/dev/nfs nfsroot=192.168.2.129:/nfs/rootfs rw console=ttySAC2,115200 init=/linuxrc ip=192.168.2.99 /* 挂载nfs rootfs
setenv bootarg 设置环境变量( bootarg是启动参数)
root=/dev/nfs 指定根文件系统类型是 nfs
nfsroot=192.168.2.129:/nfs/rootfs 指定source rootfs的位置(是在ip 是192.168.9.120的机器上 ,的/source/rootfs目录下). 注意/nfs/rootfs必须和前面NFS服务配置文件设置一致
# savenenv //保存环境变量
但是还是挂接不上,但是内核已经启动起来了。
参数正确,网络没问题,nfs虚拟机挂接没有问题,但是还是不行。
加载文件系统失败,具体原因应该是内核权限配置问题,在之后的内核编译中在详细进行问题查找。先更换内核继续进行。
完成了环境的搭建。在电脑里写一个应用程序如hello.c ,里面就简单的输出你的创客注册的名字。 通过NFS的同步, 在板子上能运行该程序,输出你的名字?
1. 挂接上虚拟机的nfs文件系统,后将编译好的程序直接放到虚拟机目录下,开发板就能直接查看,然后直接运行即可,注意程序要使用arm-gcc 工具链进行编译。
arm-cortex_a8-linux-gnueabi-gcc hello.c -o hello
cp hello /home/linux/nfs/rootfs/ 目录下。