【系统移植】
系统的移动、植入(加+减);
内容:环境搭建、BootLoader的移植、内核移植(系统+设备树+驱动)、跟文件系统移植;
特点:写代码少、实际动手较多;
【嵌入式】
特点: 三低(成本、体积、耗能)一高(性能);
应用:
嵌入式系统:
无os嵌入式系统:应用、驱动、硬件(实现功能相对单一、如果要是多个功能,只有通过逻辑来处理,运行效率很低);
有os嵌入式系统:应用、内核、驱动、硬件(可以并发的多任务执行,实现功能相对复杂)
常见的嵌入式系统:
linux、wince、vxworks
常见的架构:
arm、x86、mips、
【系统移植】
开发主机:程序的编写,编译成目标机所对应的指令;
目标机:程序运行的主机
文件传输的方式:
串口:传输效率低,对于大文件的传输很慢,使用不方便。
SD卡:烧写执行程序到SD卡中(启动代码);
SD卡的烧写方式:
1. 将SD烧写的工具拷贝到虚拟机中,环境搭建/工具/sdfuse_q
2. 进入到sdfuse_q目录;
cd sdfuse_q
3. 加入SD到虚拟中。
虚拟机-->可移动设备-->设备名称(usb)-->连接
成功:或者弹出SD卡的目录,或者也可以通过ls /dev/sdb 找到对应的sd卡设备文件名
4. 烧写u-boot-fs4412.bin到SD卡中
sudo ./mkuboot.sh (等待的过程);
5. 通过SD方式启动开发板。
网络:
1. 网络能够进行通信:ping命令能够ping通;
【网络设置】
开发主机:
1. 网卡的绑定:编辑 --> 虚拟网络编辑器 --> 将VMnet0设置成为桥接模式(绑定网卡:和目标机连接的网卡)
2. 网络IP地址的设置:设置虚拟机的IP地址: 192.168.1.250
目标机:
常用到命令:
set bootcmd loadb\;go 20008000 //直接发送文件就可以运行
set bootcmd tftp 20008000\;go 20008000
prientenv(pri):输出环境信息 ---观察开发板环境变量
setenv(set):设置环境信息
set bootdelay 2 //将启动延时变量 bootdelay的值设置为2s
set server //删除环境变量server;
saveenv(save):保存环境信息
1. 目标机IP的设置:
IP地址:
set serverip 192.168.1.250 //设置服务器的IP地址,也就是虚拟机的IP地址,一定要和虚拟机的ip地址保持一致;
set ipaddr 192.168.1.191 //设置目标机的IP地址,也就开发板的IP地址,要和虚拟的IP处于同一个网段;
set gatewayip 192.168.1.1 //设置的网关
set netmask 255.255.255.0 //设置的是子网掩码
save
2. 检查是目标机和开发主机是否能够建立连接
ping 192.168.1.250(在执行该指令的时候,只能在目标板上执行)
现象:
ping failed; host 192.168.1.250 is not alive
则说明,目标机和开发主机不能够建立连接
分析结果: 1.检查ip是否设置成功(开发主机、目标机、网线是否连接)
2.连接的方式(采用桥接的方式)
现象:
Using dm9000 device
host 192.168.1.190 is alive
则说明,目标机和开发主机能够建立连接;
【文件的传输】
终端命令 tftp localhost
ps aux | grep tftp
设置TFTP文件传输服务器:
1. 服务器(开发主机):
1) 能够和外网建立连接:ping通百度
ping www.baidu.com
2) 安装服务器:
sudo apt-get install tftp-hpa tftpd-hpa //tftp-hpa表示客户端,tftpd-hpa表示服务器;
3) 配置tftp服务器:
sudo vim /etc/default/tftpd-hpa
1 # /etc/default/tftpd-hpa
2
3 TFTP_USERNAME="tftp"
4 TFTP_DIRECTORY="/var/lib/tftpboot" //tftp 服务器文件共享目录;
5 TFTP_ADDRESS="0.0.0.0:69" //tftp 服务器的IP地址和端口号
6 #TFTP_OPTIONS="--secure"
7 TFTP_OPTIONS="-l -c -s" //既可以共享文件,也可以上传文件
4) 修改文件共享目录的权限:
sudo chmod 777 /var/lib/tftpboot
5) 启动tftp服务器
sudo service tftpd-hpa restart
6) 将所有传输的文件拷贝到tftp共享目录/var/lib/tftpboot
2. 客户端(目标机):
tftp 41000000 uImage //下载kernel
tftp 42000000 exynos4412-fs4412.dtb //下载设备树
tftp 43000000 ramdisk.img //下载根文件系统
如果出现如下现象: T T T
分析原因:在等待服务器发送数据;说明服务器没有启动,或者没有文件等;
重启tftp服务器;
bootm 41000000 43000000 42000000
kernel地址 根文件系统地址 设备树地址
出现的现象:系统不支持;
分析原因:uboot的版本是2010,版本太低;
解决办法:更新启动uboot,更新2013的版本;
1. 下载u-boot为2013的版本;
tftp 41000000 u-boot-fs4412.bin
2. 烧写:
movi write u-boot 41000000
3. 重启:看到版本为2013
更新uboot,重新配置操作:
出现时钟:set bootargs
发现问题:
如果重启开发板,需要重新下载内核、设备树和根文件系统,才能正常;
解决:
1. 可以将所有下载和执行的命令用环境参数保存:
利用自启动参数来实现:bootcmd
set bootcmd tftp 41000000 uImage\; tftp 42000000 exynos4412-fs4412.dtb\; tftp 43000000 ramdisk.img\; bootm 41000000 43000000 42000000
重启开发板后,根文件系统中文件发生了改变,不便于调试;
【nfs挂载】
需要配置nfs服务器和客户端:
1. 服务器的配置:
1. 服务的安装:在能够和外网建立连接的情况下安装
ping www.baidu.com
sudo apt-get install nfs-kernel-server
2. 确定要挂载目录
1) 拷贝根文件系统到你的目录中
cp rootfs.tar.xz /home/farsight/workspace/fs4412
2) 进入到目录中
cd /home/farsight/workspace/fs4412
3) 解压跟文件系统
tar xf rootfs.tar.xz
4) 进入到跟文件系统目录中
cd rootfs
5) 查看根文件系统目录名称
pwd ===> /home/farsight/workspace/fs4412/rootfs
3. 配置nfs挂载
sudo vim /etc/exports
11 /home/farsight/workspace/fs4412/rootfs *(rw,sync,no_root_squash,no_subtree_check)
4. 启动nfs服务器
sudo service nfs-kernel-server restart
2. 客户端的配置
set bootargs root=/dev/nfs nfsroot=192.168.1.250:/home/farsight/workspace/fs4412/rootfs rw console=ttySAC2,115200 init=/linuxrc ip=192.168.1.191
板子启动参数:
set serverip 192.168.1.250 //设置服务器的IP地址,也就是虚拟机的IP地址,一定要和虚拟机的ip地址保持一致;
set ipaddr 192.168.1.191 //设置目标机的IP地址,也就开发板的IP地址,要和虚拟的IP处于同一个网段;
set gatewayip 192.168.1.1 //设置的网关
set netmask 255.255.255.0 //设置的是子网掩码
save
set bootcmd tftp 41000000 uImage\; tftp 42000000 exynos4412-fs4412.dtb\; bootm 41000000 - 42000000
set bootargs root=/dev/nfs nfsroot=192.168.1.250:/home/farsight/workspace/fs4412/rootfs rw console=ttySAC2,115200 init=/linuxrc ip=192.168.1.191
nfs挂载 挂载在的主机:挂载的目录 读写 调试终端 启动程序 开发板的ip
set bootargs noinitrd root=/dev/nfs nfsroot=192.168.100.111:/home/nfsdir rw console=ttySAC2,115200n8 init=/linuxrc ip=192.168.100.11 clk_ignore_unused
这个叫内核启动参数 内核版本为exynos4412-origen.dtb uImage