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

发布时间:2024年01月24日

一.系统移植

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 //运行程序
文章来源:https://blog.csdn.net/m0_58443060/article/details/135829649
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。