系统移植(System Porting)是将一个操作系统从一种硬件平台迁移到另一种硬件平台的过程。这个过程涉及将操作系统的内核和相关的软件组件调整和适配到新的硬件环境中。
? ? 三低:功耗低 ?成本低 ?体积小
? ? 两高:可靠性高 ?安全性高
通用嵌入式系统硬件一般由一下部分组成
? ? 微控制器:cpu
? ? 晶振:提供时钟
? ? 内存(如:SRAM,SDRAM):运行程序
? ? 存储器(如:ROM,FLASH,SD,微硬盘):存储程序
? ? 其他外围设备接口:
? ? 输入、输出接口:
? ? 1)有os的软件组成
? ? ? ? APP
? ? ? ? kernel
? ? ? ? 驱动层
? ? ? ? 硬件层
? ? 2)无os的软件组成
? ? ? ? APP
? ? ? ? 驱动层
? ? ? ? 硬件层
? ? 1)搭建交叉编译环境
? ? 2)bootloader的移植
? ? ? ? 启动引导内核
? ? 3)kernel的移植
? ? 4)rootfs的制作
? ? ? ? 根文件系统:根目录及目录下的文件叫rootfs
? ? 主机:PC ?
? ? 目标机:ARM开发板
? ? 连接介质: 串口 网络 ?USB
1.编辑 -> 虚拟网络编辑器 -> 桥接模式 -> 桥接至(有线网卡) -> 确定
2.虚拟机 -> 设置 -> 网络适配器 -> 自定义 -> 桥接模式 -> 确定
3.点击 网络图标 -> 有线设置 -> + -> mac地址 -> ipv4 -> 自动/手动 -> 确定
? ? 1) sudo apt-get install tftpd-hpa ?//下载安装tftp服务器
? ? 2) mkdir /home/hqyj/tftpboot ?//创建tftp服务器的目录
? ? 3) sudo vi /etc/default/tftpd-hpa //修改tftp服务器的配置文件
? ? ? ? TFTP_USERNAME="xxx"
? ? ? ? TFTP_DIRECTORY="/home/xxx/tftpboot" ? #tftp服务器的目录路径
? ? ? ? TFTP_ADDRESS="0.0.0.0:69"
? ? ? ? TFTP_OPTIONS="-l -c -s"
? ? 4) sudo service tftpd-hpa restart //启动tftp服务器
2.客户端【开发板】
? ? pri //查看环境参数
? ? set gatewayip 192.168.6.1 //网关ip
? ? set ipaddr 192.168.6.123? //板子ip
? ? set serverip 192.168.6.128?//服务器的ip(ubuntu)
? ? save //保存
【测试】服务器和客户端是否ping的通
? ? 板子ping主机:ping 192.168.6.128? -> is alive 表示成功ping通
? ? 板子通过tftp下载服务器的文件: chmod 777 xxx.bin
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? tftp 0x40008000 led.bin
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? go 0x40008000
【解决】is ?not ?alive ????
? ? 1.查看网络配置
? ? 2.sudo service tftpd-hpa restar
? ? 3.网线没接
【ubuntu端】
? ? 1.将uImage/exynos4412-fs4412.dtb/ramdisk.img文件拷贝到tftp服务器的目录
? ? 2.chmod 777 /home/xxx/tftpboot/*
【板子】
? ? tftp 0x41000000 uImage //下载内核
? ? tftp 0x42000000 exynos4412-fs4412.dtb //下载设备树
? ? tftp 0x43000000 ramdisk.img ? ? ? ? //下载根文件系统
? ? bootm 0x41000000 0x43000000 0x42000000 ?//加载内核
【看效果】
? ? 1.【ubuntu端】
? ? ? ? arm-linux-gcc hello.c
? ? ? ? cp a.out /home/hqyj/tftpboot
? ? 2.【板子端】
? ? ? ? ifconfig eth0 192.168.6.123?//ip地址指定为板子的IP
? ? ? ? ping 192.168.6.128?//板子ping主机
? ? ? ? tftp -g -r a.out 192.168.6.128?//从服务器下载a.out文件
? ? ? ? chmod 777 a.out
? ? ? ? ./a.out
? ? ? ?
【板子端修改】
? ? set bootcmd tftp 0x41000000 uImage\;tftp 0x42000000 exynos4412-fs4412.dtb\;tftp 0x43000000 ramdisk.img\;bootm 0x41000000 0x43000000 0x42000000 //自启动命令
? ? set bootargs root=/dev/ram rw console=ttySAC2,115200 clk_ignore_unused init=/linuxrc ?ip=192.168.6.123?rootwait //给内核传递参数
? ? save //保存
? ? boot //板子启动 类似断电上电
? ? 1)sudo apt-get install nfs-kernel-server //下载安装nfs服务器
? ? 2)mkdir /home/xxx/nfs //创建nfs目录 然后将rootfs解压到nfs目录
? ? ? ? ? ? ? ? ? ? ? ?解压命令? ? ? tar xvf rootfs.tar.gz
? ? 3)sudo vi /etc/exports ? //修改配置文件
? ? ? ? /home/xxx/nfs/rootfs *(rw,sync,no_root_squash) #指定rootfs的目录
? ? 4)sudo service nfs-kernel-server restart //启动服务
? ? set bootcmd tftp 0x41000000 uImage\;tftp 0x42000000 exynos4412-fs4412.dtb\;bootm 0x41000000 - 0x42000000 //自启动命令
? ? set bootargs root=/dev/nfs nfsroot=192.168.6.128:/home/hqyj/nfs/rootfs,v3 rw console=ttySAC2,115200 clk_ignore_unused init=/linuxrc ip=192.168.6.123//给内核传递参数
? ? save //保存
? ? boot //板子启动 类似断电上电
【看效果】板子通过nfs客户端访问服务器
? ? ubuntu:
? ? ? ? mkdir /home/hqyj/nfs/rootfs/hello.c
? ? ? ? arm-linux-gcc /home/hqyj/nfs/rootfs/hello.c
? ? 板子:
? ? ? ? ./a.out //运行程序
?