系统移植 day1 tftp简单文件传输协议和nfs网络文件系统的环境搭建

一.系统移植

1.嵌入式系统的特点

三低:功耗低 成本低 体积小

两高:可靠性高 安全性高

2.通用嵌入式系统硬件一般由一下部分组成

微控制器:cpu

晶振:提供时钟

内存(如:SRAM,SDRAM):运行程序

存储器(如:ROM,FLASH,SD,微硬盘):存储程序

其他外围设备接口:

输入、输出接口:

3.嵌入式系统软件组成部分

1)有os(操作系统)的软件组成

APP

kernel

驱动层

硬件层

2)无os的软件组成

APP

驱动层

硬件层

4.系统移植的内容

1)搭建交叉编译环境

2)bootloader的移植

启动引导内核

3)kernel的移植

4)rootfs的制作

根文件系统:根目录及目录下的文件叫rootfs(类似共享文件)

5.嵌入式Linux交叉开发环境硬件基本组成

主机:PC

目标机:ARM开发板

连接介质: 串口 网络 USB

6.内核是什么 -- 操作系统内核

这里的"内核"是指操作系统内核,而不是开发板的CPU。操作系统内核是操作系统最核心的部分,负责管理系统资源、提供系统调用接口和管理硬件设备

二.网络配置

1.编辑 -> 虚拟网络编辑器 -> 桥接模式 -> 桥接至(有线网卡) -> 选择USB -> 确定 //别选成网络了

2.虚拟机 -> 设置 -> 网络适配器 -> 自定义 -> 桥接模式 -> 确定

3.点击 网络图标 -> 有线设置 -> + -> mac地址 -> ipv4 -> 自动/手动 -> 确定//学会设置手动和自动ip

sudo service network-manager restart //重启网络服务

sudo service tftpd-hpa restart //重启服务端

三.tftp环境搭建

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1.服务器【ubuntu】 1) sudo apt-get install tftpd-hpa //下载安装tftp服务器 2) mkdir /home/hqyj/tftpboot //创建tftp服务器的目录 3) sudo vi /etc/default/tftpd-hpa //修改tftp服务器的配置文件 TFTP_USERNAME="hqyj" TFTP_DIRECTORY="/home/hqyj/tftpboot" //pwd查看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.7.1 //网关ip set ipaddr 192.168.7.147 //板子ip set serverip 192.168.7.48 //服务器的ip(ubuntu) save //保存 //如果写错了,如: set ipaddr 可直接删除 【测试】服务器和客户端是否ping的通 板子ping主机:ping 192.168.7.48 -> is alive 表示通了 板子通过tftp下载服务器的文件: chmod 777 led.bin //修改文件权限 tftp 0x40008000 led.bin //下载文件 go 0x40008000 //执行文件 【解决】is not alive 1.查看网络配置-三步走 2.sudo service tftpd-hpa restart //重启虚拟机tftp服务器 3.网线没接 |

四.将已经做好的内核和rootfs系统运行起来看效果

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 【ubuntu端】 1.将uImage/exynos4412-fs4412.dtb/ramdisk.img文件拷贝到tftp服务器的目录 2.chmod 777 /home/hqyj/tftpboot/* //修改路径下所有文件权限为777*/ 【板子】 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.7.147 //ip地址指定为板子的IP ping 192.168.7.48 //板子ping主机 tftp -g -r a.out 192.168.7.48 //从服务器下载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 //自启动命令,开机(如果不按回车)自动执行三条命令;按下回车的界面可通过输入boot执行这四条命令 set bootargs root=/dev/ram rw console=ttySAC2,115200 clk_ignore_unused init=/linuxrc ip=192.168.7.147 rootwait //给内核传递参数 //set bootargs:GRUB 的命令,设置引导参数。这些参数会在 Linux 内核启动时传递给它 //root=/dev/ram rw: 这告诉内核将 RAM 作为根文件系统挂载,并设置其为读写模式 //console=ttySAC2,115200: 设置串口和波特率,输出将被发送到 ttySAC2 端口 //clk_ignore_unused: 这是一个特定的引导参数,用于告诉内核忽略未使用的时钟。这通常与特定的硬件配置有关。 //init=/linuxrc: 这告诉 内核 在启动时运行 /linuxrc 文件作为 初始化脚本。 //ip=192.168.7.147: 这设置了内核的 IP 地址为 192.168.7.147 //rootwait: 这告诉内核在启动过程中等待一个根文件系统设备被挂载 save //保存 boot //板子启动 类似断电上电 |

五.nfs环境搭建

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1.nfs服务器【ubuntu】 1)sudo apt-get install nfs-kernel-server //下载安装nfs服务器 2)mkdir /home/hqyj/nfs //创建nfs目录 然后将rootfs解压到nfs目录 tar xvf rootfs.tar.gz 3)sudo vi /etc/exports //修改配置文件 /home/hqyj/nfs/rootfs *(rw,sync,no_root_squash) #指定rootfs的目录 4)sudo service nfs-kernel-server restart //启动服务 //1) 2) 3)都只需要执行一次 4)需要每次都执行 |

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 2.nfs客户端【开发板的系统】 set bootcmd tftp 0x41000000 uImage\;tftp 0x42000000 exynos4412-fs4412.dtb\;bootm 0x41000000 - 0x42000000 //修改后的自启动命令,取消了ramdisk存储(防止每次上下电就重置) set bootargs root=/dev/nfs nfsroot=192.168.2.222:/home/hqyj/nfs/rootfs,v3 rw console=ttySAC2,115200 clk_ignore_unused init=/linuxrc ip=192.168.2.111//给板子传参。设置引导参数,将nfs(网络文件系统)作为挂载,设置挂载服务器ip和路径,使用NFS的版本3,设置可读写,串口和波特率,忽略未使用的时钟,/linuxrc作为初始化脚本,内核ip设置为192.168.2.111 save //保存 boot //板子启动 类似断电上电 【看效果】板子通过nfs客户端访问服务器 ubuntu: mkdir /home/hqyj/nfs/rootfs/hello.c arm-linux-gcc /home/hqyj/nfs/rootfs/hello.c //交叉编译 板子: ./a.out //运行程序 |

相关推荐
网安CILLE9 分钟前
2024年某大厂HW蓝队面试题分享
网络·安全·web安全
万物得其道者成14 分钟前
React Zustand状态管理库的使用
开发语言·javascript·ecmascript
沐风ya15 分钟前
Reactor介绍,如何从简易版本的epoll修改成Reactor模型(demo版本代码+详细介绍)
网络
SUGERBOOM19 分钟前
【网络安全】网络基础第一阶段——第一节:网络协议基础---- OSI与TCP/IP协议
网络·网络协议·web安全
蜗牛沐雨19 分钟前
用 ReactPHP 实现图片上传加速:让并发上传实现真正的高效
php·reactphp
学步_技术20 分钟前
Python编码系列—Python抽象工厂模式:构建复杂对象家族的蓝图
开发语言·python·抽象工厂模式
petaexpress36 分钟前
常用的k8s容器网络模式有哪些?
网络·容器·kubernetes
wn53143 分钟前
【Go - 类型断言】
服务器·开发语言·后端·golang
Hello-Mr.Wang1 小时前
vue3中开发引导页的方法
开发语言·前端·javascript
救救孩子把1 小时前
Java基础之IO流
java·开发语言