系统移植 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 //运行程序
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>