系统移植 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 //运行程序 |

相关推荐
ServBay9 小时前
垃圾堆里编码?真的不要怪 PHP 不行
后端·php
用户9623779544811 小时前
CTF 伪协议
php
BingoGo3 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack3 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo4 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack4 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack5 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo5 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack6 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理6 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php