系统移植 搭建nfs服务器,启动盘,内核安装和加载

news2024/11/27 12:39:58

目录

1. nfs 服务器网络环境搭建

1.1. 查看是否安装了 nfs 服务器

1.2. 修改nfs配置文件

1.3. 创建nfs工作目录

1.4. 重启nfs服务

1.5. 开始测试是否成功

2. SD 卡启动盘

2.1. 方法1:从0扇区开始烧写

2.2. 方法2:直接部署

3. Linux 内核的安装与加载

3.1. 使用tftp和emmc加载内核和根文件系统

3.2. 通过tftp加载内核通过nfs挂载根文件系统

4. uboot安装到EMMC


1. nfs 服务器网络环境搭建

1.1. 查看是否安装了 nfs 服务器

dpkg -s nfs-kernel-server


出现ok代表安装成功

若是未出现,在联网的情况下使用

sudo apt-get install nfs-kernel-server

安装nfs服务器

1.2. 修改nfs配置文件

使用下面命令打开nfs配置文件

sudo vi /etc/exports


为了方便我把其放到下面
/opt/6818/rootfs *(rw,sync,no_subtree_check,no_root_squash)

1.3. 创建nfs工作目录

sudo mkdir -p /opt/6818/rootfs 创建工作目录

sudo chmod -R 777 /opt/* 增加工作目录权限

说明创建成功

1.4. 重启nfs服务

每次重启 ubuntu都需要重启 nfs

sudo service nfs-kernel-server restart

1.5. 开始测试是否成功

》1.在/opt/6818/rootfs下创建文件

》2.创建挂载文件

sudo mount -t nfs localhost:/otp/6818/rootfs /mnt

》3.查看文件是否同步

比较mnt文件和rootfs文件里面内容是否一致

》4.若是想要取消挂载可以使用下面指令

sudo umount /mnt 取消挂载命令

2. SD 卡启动盘

本试验:需要ubootpak.bin文件

2.1. 方法1:从0扇区开始烧写

》1.将资料中“源文件”中的 ubootpak.bin 文件放到 Ubuntu 内的文件夹中

cd ~ 到家目录

mkdir Linux 创建Linux文件

cd Linux 进入文件

mkdir 6818 创建6818文件

cd 6818 进入文件

mkdir uboot 创建uboot文件

将ubootpak.bin文件放入

》2.输入下面命令制作zero.bin空镜像

sudo dd if=/dev/zero of=zero.bin count=1

》3.执行下面命令生成uboot.bin文件

cat zero.bin ubootpak.bin>uboot.bin

》4.生成1M的clear.bin空镜像

sudo dd if=/dev/zero of=clear.bin count=2048

》5.使用Win32Disklmager将镜像烧写到SD卡

将ubuntu下的uboot.binclear.bin放到windows下

注意烧写顺序:

先烧写clear.bin后烧写uboot.bin

2.2. 方法2:直接部署

》1.虚拟机--》可移动设备--》 realtek USB3.0-CRW---》连接
》2. 把资料包里的sdtool压缩包放到虚拟机里,并解压

sudo tar -xvf sdtool

在 ubuntu 中执行命令
sudo ./s5p6818-sdmmc.sh /dev/sdb ubootpak.bin
如果打印一下信息表示,部署成功:

688+1 records in
689+0 records out
352768 bytes (353 kB) copied, 0.00914641 s, 38.6 MB/s
^_^ The image is fused successfully

3. Linux 内核的安装与加载

实验3.1:需要uImage内核文件和ramdisk文件系统镜像

实验3.2:需要rootfs-A53-ok.tar

3.1. 使用tftp和emmc加载内核和根文件系统

将资料中uImage和ramdisk,拷贝到 ubuntu中tftp工作目录下

3.1.1. 重启 tftp 服务器

执行命令重启服务器

sudo service tftpd-hpa restart

3.1.2. 开发板操作

》1.在uboot交互模式下执行下面指令

tftp 0x41000000 uImage 传输uImage到开发板

》2.将内核镜像写入到 EMMC 中指定的扇区
mmc write 0x41000000 0x800 0x4000

上条代码分析

mmc 指定要执行的 MMC(多媒体卡)命令的标识符

write 指定要执行的操作的关键字,表示要进行写入操作

0x41000000 目标写入地址,十六进制地址,将数据写入到 eMMC 中的指定扇区

0x800 数据起始地址是0x800,内核镜像在内存中的起始位置

0x4000 写入的数据的大小,以字节为单位

》3.根文件系统镜像到内存中

tftp 0x41000000 ramdisk.img 传输ramdisk.img到开发板

》4.将根文件系统镜像写入到 EMMC 中指定的扇区

mmc write 0x41000000 0x20800 0x20800

》5.启动方式是从EMMC驱动,所以修改uboot启动方式

代码放下面,复制时得和上面格式相同

setenv bootcmd mmc read 0x48000000 0x800 0x4000\;mmc read 0x49000000 0x20800 0x20800\;bootm 0x48000000 0x49000000

setenv bootargs root=/dev/ram rw initrd=0x49000040,0x1000000 rootfstype=ext4 init=/linuxrc console=ttySAC0,115200

saveenv

》6.重启开发板,什么都不操作,出现下面界面成功

3.2. 通过tftp加载内核通过nfs挂载根文件系统

3.2.1. 文件操作

》1.将资料中“源文件”目录下的“rootfs-A53-ok.tar”拷贝到 ubuntu 中 nfs 工作目录下

放到/opt/6818/rootfs

》2.解压根文件系统到 nfs 工作目录

sudo tar -xvf rootfs-A53-ok.tar 解压命令

解压后删除安装包

rm rootfs-A53-ok.tar 删除命令

》3.修改uboot启动参数

注意代码分行

setenv bootcmd tftp 0x48000000 uImage\;bootm 0x48000000

setenv bootargs root=/dev/nfs nfsroot=192.168.1.125:/opt/6818/rootfs/rootfs rw console=ttySAC0,115200 init=/linuxrc ip=192.168.1.200

saveenv

》4.重启nfs服务器

sudo service nfs-kernel-server restart 重启服务器命令

》5.开发板重新上电

说明成功

4. uboot安装到EMMC

本试验:需要ubootpak.bin文件中

》1.将资料ubootpak.bin拷贝到ubuntu中tftp工作目录

》2.在uboot交互下安装uboot

tftp 0x41000000 ubootpak.bin

如下图:

》3.将内核镜像安装到EMMC中指定扇区

执行下面命令

update_mmc 2 2ndboot 0x41000000 0x200 0x28A

成功显示

下图是命令详解

》4.关闭开发板电源,调整拨码开关位置为 EMMC 启动

》5.给开发板重新上电,观察 uboot 是否能正常启动
 

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

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

相关文章

SpringBoot编程---Day 01

目录 一、springboot介绍 (一)Spring Boot 特性 (二)了解自动配置原理 (三)springboot 入口功能详解 (四)自定义banner (五)容器功能 (六)配置文件 二…

(九)枚举器和迭代器(1)

一、枚举器和可枚举类型 复习完了数组之后,由于数组遍历的这个行为,跟枚举器有很大的相关性,所以接下来继续要学习与枚举器相关的内容。 1、使用 foreach 语句 int[] arr1 { 10, 11, 12, 13 };foreach (int item in arr1)//枚举元素Consol…

尚硅谷大数据Flink1.17实战教程-笔记01【Flink概述、Flink快速上手】

尚硅谷大数据技术-教程-学习路线-笔记汇总表【课程资料下载】视频地址:尚硅谷大数据Flink1.17实战教程从入门到精通_哔哩哔哩_bilibili 尚硅谷大数据Flink1.17实战教程-笔记01【Flink概述、Flink快速上手】尚硅谷大数据Flink1.17实战教程-笔记02【Flink部署】尚硅谷…

【JVM 监控工具】性能诊断--JProfiler的使用

文章目录 背景一、Java 性能诊断工具简介二、简单命令行工具三、图形化综合诊断工具JVisualvmJProfiler 四、分布式应用性能诊断五、IDEA中设置JProfilerJProfiler是什么功能安装使用生成快照配置VM运行程序 背景 性能诊断是软件工程师在日常工作中需要经常面对和解决的问题&a…

公司新来的阿里p8,看了我做的APP和接口测试,甩给了我这份文档

移动应用App已经渗透到每个人的生活、娱乐、学习、工作当中,令人激动、兴奋且具有创造性的各种App犹如雨后春笋般交付到用户手中。各类智能终端也在快速发布,而开发者对于全球移动设备的质量和性能却掌握甚少,App与设备的兼容性问题常常导致用…

【状态估计】基于卡尔曼滤波器的传感器直流电机驱动研究(Matlab代码、Simulink实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Navicat 受邀出席 PostgreSQL 技术峰会,欢迎莅临我们的展台了解 Navicat 工具包如何提升你的工作效能

Navicat 受邀出席 PostgreSQL 技术峰会成都站,欢迎童鞋们莅临我们的展台。你有机会与我们的专家面对面交流,并了解实用的 Navicat 工具包如何帮助PostgreSQL用户(应用开发人员、DBA、运维人员以及数据分析师)有效地提升日常的工作…

串口控制小车(二次开发)

0.资料 项目工程文件夹 分文件原理 之前的代码 1.L9110S电机驱动模块demo 2.串口通信(习题4:PC发送字符串指令给单片机) 3.wifi模块(串口中断代码优化) 3.蓝牙模块 1.串口指令控制小车_分文件 1、和单片机的接…

MVC、MVP、MVVM:详解2

概述 MVC、MVP、MVVM 都是在 Android 开发中经常用到的架构思想,它们都是为了更好地分离代码、提高代码可复用性、方便维护等目的而设计的。下面对这三种架构思想进行简单的介绍和比较。 MVC MVC 架构是最早被使用的一种架构,它把程序分成了三个部分&…

CVPR 2023 首届视觉异常检测(Visual Anomaly and Novelty Detection,VAND)挑战赛 Zero-shot 赛道冠军

这篇文章主要介绍一下我们在 CVPR 2023 VAND Workshop 的挑战赛中所采用的模型和方案。在 Zero-shot 赛道中我们获得了冠军(Winner),在 Few-shot 赛道中,我们获得了第四名(Honorable Mentions)。 题目&…

怎么安装anaconda?anaconda安装详解!

Anaconda Navigator 是 Anaconda 的图形化管理界面,点击它即可进入 Anaconda 的图像化管理界面。许多小伙伴可能被朋友或者小编安利过Anaconda而跃跃欲试,今天小编就将Anaconda安装详解分享给大家。心动的小伙伴们赶紧安装起来吧! 下载 官方…

1分钟教你配置好你的python环境

欢迎来到我们的系列博客《Python360全景》!在这个系列中,我们将带领你从Python的基础知识开始,一步步深入到高级话题,帮助你掌握这门强大而灵活的编程语法。无论你是编程新手,还是有一定基础的开发者,这个系…

不能发现BUG的测试用例不是好的测试用例吗?

一般情况下技术岗面试都需要经历面试和笔试部分,面试过程中主要采用问答的形式,一般没有完全固定的回答,主要是根据自己的工作经验应答面试官的问题,而笔试部分更注重基础知识以及问题的常规解决方案。下面IT技术宅男为大家整理了…

C++案例

目录 一、while循环猜数组 二、 水仙花数 三、for循环敲桌子游戏 四、99乘法表 五、一维数组--元素逆置 六、冒泡排序 七、封装一个函数--利用冒泡排序,实现对整型数组的升序排序 八、结构体嵌套结构体 九、结构体排序 一、while循环猜数组 说明&#x…

经验总结:13 条自动化测试框架设计原则

1.代码规范 测试框架随着业务推进,必然会涉及代码的二次开发,所以代码编写应符合通用规范,代码命名符合业界标准,并且代码层次清晰。特别在大型项目、多人协作型项目中,如果代码没有良好的规范,那么整个框…

使用@Schedule注解实现定时任务,多线程执行定时任务,Cron表达式详解

Schedule注解实现定时任务,多线程执行定时任务,Cron表达式详解 使用Schedule注解实现定时任务Scheduled注解多线程执行定时任务Cron表达式Cron中的通配符 使用Schedule注解实现定时任务 1、首先,在项目启动类上添加 EnableScheduling 注解&am…

Vue CLI 全局事件总线 消息的订阅与发布

3.10. 全局事件总线(GlobalEventBus) 一种可以在任意组件间通信的方式,本质上就是一个对象,它必须满足以下条件 所有的组件对象都必须能看见他这个对象必须能够使用$on $emit $off方法去绑定、触发和解绑事件 使用步骤 定义全…

MySQL数据库基础 12

第十二章 MySQL数据类型 1. MySQL中的数据类型2. 整数类型2.1 类型介绍2.2 可选属性2.2.1 M2.2.2 UNSIGNED2.2.3 ZEROFILL 2.3 适用场景2.4 如何选择? 3. 浮点类型3.1 类型介绍3.2 数据精度说明3.3 精度误差说明 4. 定点数类型4.1 类型介绍 5. 位类型:BI…

CSS--Java EE

在前端的代码中&#xff0c;CSS 相关的代码写在什么位置呢&#xff1f; CSS 可以写在<style>标签中外部引入&#xff1a;输入 link: css写在 div 标签中 目录 一、选择器的种类 1 基础选择器 1.1 类选择器 1.2 id选择器 1.3 标签选择器 1.4 通用选择器 小结 2 …

Spring Security6 全新写法,大变样!

文章目录 1. WebSecurityConfigurerAdapter2. 使用 Lambda3. 自定义 JSON 登录3.1 自定义 JSON 登录3.1.1 自定义登录过滤器3.1.2 自定义登录接口 3.2 原因分析3.3 问题解决 Spring Security 在最近几个版本中配置的写法都有一些变化&#xff0c;很多常见的方法都废弃了&#x…