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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/643168.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ctfshow-命令执行(web53-web72)

目录 web53 web54 web55 web56 web57 web58 web59 web60 web61 web62 web63 web64 web65 web66 web67 web68 web69 web70 web71 web72 web53 …

麒麟系统—— openKylin 安装到虚拟机以及开放SSH通过工具连接

麒麟系统—— openKylin 安装到虚拟机以及开放SSH通过工具连接 1. 在VMware中安装openKylin麒麟系统步骤1:准备VMware环境步骤2:创建新的虚拟机步骤3:安装openKylin麒麟系统步骤4:调整分别率步骤5:安装SSH 2. 使用Open…

x-cmd pkg | perl - 具有强大的文本处理能力的通用脚本语言

目录 介绍首次用户技术特点竞品进一步阅读 介绍 Perl 是一种动态弱类型编程语言。Perl 内部集成了正则表达式的功能,以及巨大的第三方代码库 CPAN;在处理文本领域,是最有竞争力的一门编程语言之一 生态系统:综合 Perl 档案网络 (CPAN) 提供了超过 25,0…

flink-java使用介绍,flink,java

1、环境准备 文档:https://nightlies.apache.org/flink/flink-docs-release-1.18/zh/ 仓库:https://github.com/apache/flink 下载:https://flink.apache.org/zh/downloads/ 下载指定版本:https://archive.apache.org/dist/flink…

c语言-柔性数组

文章目录 前言一、柔性数组的介绍1.1 柔性数组的定义 二、柔性数组的使用2.1 使用说明2.2 结构体中的成员只包含一个柔性数组成员2.3 结构体中的成员包含其他成员和一个柔性数组成员 三、模拟柔性数组总结 前言 本篇文章介绍c语言中的柔性数组。 一、柔性数组的介绍 1.1 柔性…

玩客云Armbian 23.8.1 Bullseye安装PrometheusGrafana

Welcome to Armbian 23.8.1 Bullseye with bleeding edge Linux 6.4.13-edge-meson prometheus 参考Monitoring – How to install Prometheus/Grafana on arm – Raspberry PI/Rock64 | Blogs (mytinydc.com) cd /usr/local/srcwget https://github.com/prometheus/prometh…

MySQL也开始支持JavaScript了

2023 年 12 月 16 日,Oracle 公司在一篇名为 《Introducing JavaScript support in MySQL》的文章中宣布 MySQL 数据库服务器将开始支持 JavaScript 语言。 这个举措标志着继PostgreSQL之后, MySQL 也支持使用 JavaScript 编写函数和存储过程了。作为最…

openssl3.2/test/certs - 018 - trust variants: +anyEKU, -anyEKU

文章目录 openssl3.2/test/certs - 018 - trust variants: anyEKU, -anyEKU概述笔记END openssl3.2/test/certs - 018 - trust variants: anyEKU, -anyEKU 概述 openssl3.2 - 官方demo学习 - test - certs 笔记 #! /bin/bash# ca-cert.pem from exp 015# openssl3.2/test/c…

c语言中的sscanf函数

sscanf函数是C语言中的一个格式化输入函数,用于从字符串中按指定格式提取数据。它的原型如下: int sscanf(const char* str, const char* format, ...); 在这个函数中,"str"是输入的字符串,"format"是格式字…

微信小程序(十一)表单组件(进阶)

注释很详细,直接上代码 上一篇 新增内容:(涉及内容较多,建议细看源码) 1.radio-group的使用与数据处理 2.checkbox-group的使用与数据处理 3.picker的使用与数据同步处理(此处示范了地域与日期) 源码: form…

多协议转BACnet网关BA110

随着通讯技术和控制技术的发展,为了实现楼宇的高效、智能化管理,集中监控管理已成为楼宇智能管理发展的必然趋势。在此背景下,高性能的楼宇暖通数据传输解决方案——协议转换网关应运而生,广泛应用于楼宇自控和暖通空调系统应用中…

Vue学习笔记11--路由2(路由传参/命名路由)

一、路由的query传参 路由的query参数 传递参数 <!--跳转路由并携带query参数&#xff0c; to的字符串写法--> <!-- <router-link :to/home/message/detail?id${m.id}&title${m.title}>{{ m.title }}</router-link> --> <!--跳转路由并携带…

《WebKit 技术内幕》学习之六(2): CSS解释器和样式布局

2 CSS解释器和规则匹配 在了解了CSS的基本概念之后&#xff0c;下面来理解WebKit如何来解释CSS代码并选择相应的规则。通过介绍WebKit的主要设施帮助理解WebKit的内部工作原理和机制。 2.1 样式的WebKit表示类 在DOM树中&#xff0c;CSS样式可以包含在“style”元素中或者使…

erlang (Lists 操作模块)学习笔记(二)

keysearch 42> lists:keysearch(1, 1, [{1,hello},{2,value}]). {value,{1,hello}} 43> lists:keysearch(3, 1, [{1,hello},{2,value}]). false 在元组 TupleList 列表中搜索 第 N个元素比较等于 Key 的元组。 如果找到这样的元组&#xff0c;则返回 {value&#xff0c…

unity刷新grid,列表

获取UIGrid 组件&#xff0c;更新列表 listParent.GetComponent().repositionNow true;

自然语言处理--概率最大中文分词

自然语言处理附加作业--概率最大中文分词 一、理论描述 中文分词是指将中文句子或文本按照语义和语法规则进行切分成词语的过程。在中文语言中&#xff0c;词语之间没有明显的空格或标点符号来分隔&#xff0c;因此需要通过分词工具或算法来实现对中文文本的分词处理。分词的…

代码随想录算法训练营第二十五天| 491.递增子序列* 46.全排列* 47.全排列 II

491.递增子序列 代码随想录 视频讲解&#xff1a;回溯算法精讲&#xff0c;树层去重与树枝去重 | LeetCode&#xff1a;491.递增子序列_哔哩哔哩_bilibili class Solution {List<List<Integer>> ans new ArrayList<>();List<Integer> list new Arra…

[C++]使用yolov8的onnx模型仅用opencv和bytetrack实现目标追踪

【官方框架地址】 yolov8: https://github.com/ultralytics/ultralytics bytetrack: https://github.com/ifzhang/ByteTrack 【算法介绍】 随着人工智能技术的不断发展&#xff0c;目标追踪已成为计算机视觉领域的重要研究方向。Yolov8和ByTetrack作为当前先进的算法&…

Python实现两因素独立设计方差分析,简单效应分析

# Python实现两因素独立设计方差分析 1. 背景 1. 有研究者探讨了在不同企业文化下&#xff0c;管理者的不同语言风格所产生的影响 有的企业注重员工的独立性&#xff0c;强调个人努力和内部竞争&#xff1b;有的企业注重员工的整体性&#xff0c;强调团队合作和团队绩效。 …

LCD液晶屏驱动详解(3)

2.2、LCD控制寄存器LCDCON2 用于设置垂直方向各信号的时间参数&#xff0c;格式如下表所示&#xff1a; 功能位说明VBPD[31:24]VSYNC信号脉冲之后&#xff0c;还要经过(VBPD1)个HSYNC信号周期&#xff0c;有效的行数据才出现&#xff1b;LINEVAL[23:14]LCD的垂直宽度&#xf…