当前位置: 首页 > news >正文

系统移植 (以将Linux系统移植到S5P6818开发板为例)

(本篇文章以将Linux系统移植到S5P6818开发板为例)

本文章所需要的文件在下面链接获取:https://download.csdn.net/download/a1547998353/89406544

开发环境搭建

1、安装交叉编译工具链

安装步骤:

1. 在ubuntu的家目录(~)下,创建toolchain

        mkdir toolchain

2. 拷贝gcc-4.9.4.tar.xz到toolchain目录下

        (gcc-4.9.4.tar.xz文件在文章开头的链接获取)

3. 解压缩交叉编译工具链

        tar -vxf gcc-4.9.4.tar.xz

4. 配置环境变量

        sudo vi /etc/bash.bashrc

        在最后一行添加以下内容:

        export PATH=$PATH:/home/hq/toolchain/gcc-4.9.4/bin/

        注意:红色加粗部分改为你自己的用户名

5. 使环境变量立即生效

        source /etc/bash.bashrc

 2、配置tftp服务

(1)检查Ubuntu是否安装tftp服务

                sudo dpkg -s tftpd-hpa

        打印以下内容表示安装了tftp服务,此时跳过第二步直接看第三步配置tftp:

        Architecture: i386

        Source: tftp-hpa

        Version: 5.2-7ubuntu3.1

(2)安装tftp服务

          sudo apt-get update                                   更新源

          sudo apt-get install -f                                 更新依赖

          sudo apt-get install tftpd-hpa tftp-hpa        下载安装指令

(3)配置tftp服务

        1. 在家目录下创建一个tftpboot文件夹

                mkdir tftpboot

                目的:tftpboot目录下存放的是你要下载到开发板上的可执行文件

        2. 修改tftpboot的权限

                sudo chmod 777 tftpboot

        3. 配置tftp服务的环境变量

                sudo vi /etc/default/tftpd-hpa

        修改以下内容:

1 # /etc/default/tftpd-hpa
2 
3 TFTP_USERNAME="tftp" tftp用户名,不需要修改
4 TFTP_DIRECTORY="/home/hq/tftpboot"tftp服务下载文件的存放的路径,需要修改改成自己的对应的tftpboot的路径(将hq改为自己的用户名即可)	 
5 TFTP_ADDRESS="0.0.0.0:69"tftp服务默认使用的69端口号
6 TFTP_OPTIONS="-c -s -l"  tftp服务的参数,这个需要修改

        4. 重启tftp服务

                sudo service tftpd-hpa start         启动TFTP服务

                sudo service tftpd-hpa restart       重启TFTP服务

3、配置nfs服务

(1)检查nfs服务是否安装

        如果已安装,跳过第二步看第三步

        dpkg -s nfs-kernel-server

(2)安装nfs服务

        sudo apt-get install nfs-kernel-server

(3)配置nfs服务

        1. 在家目录下创建nfs文件夹

                mkdir nfs

        2. 修改文件权限

                chmod 777 nfs

        3. 拷贝根文件系统镜像到nfs目录下

                根文件系统文件:rootfs-A53-ok.tar.xz(文件在文章开头的链接获取

        4. 对根文件系统的压缩包进行解压缩

                cd ~/nfs

                tar -vxf rootfs-A53-ok.tar.xz

        5. 配置 nfs服务的环境变量

                sudo vi /etc/exports

               在文件的最后一行添加以下内容:

/home/hq/nfs/rootfs/ *(rw,sync,no_subtree_check,no_root_squash)
// 还是将hq改成自己的用户名即可

        6. 重启nfs服务

                sudo service nfs-kernel-server start          启动nfs服务

                sudo service nfs-kernel-server restart       重启nfs服务

4、配置Windows、linux、开发板处于同一局域网

注意配置时关闭Windows防火墙,退出杀毒软件

 (1)配置Windows的网络及ip地址

设置固定IP

 (2)配置linux的网络ip

配置网络为桥接模式,桥接到指定的有线网络。

 

 左上角 虚拟机->设置

 设置固定IP:

(3)配置开发板ip

 配置开发板网络:uboot指令设置环境变量的值

setenv ipaddr 192.168.1.99             //设置开发板ip

setenv netmask 255.255.255.0        //掩码

setenv gatewayip 192.168.1.1         //网关

setenv serverip 192.168.1.66         //服务器地址,填linux的ip

saveenv                                          //保存

 系统移植

思路

uboot镜像---------->Flash

linux内核镜像------>Flash

根文件系统镜像----->Flash

先将镜像使用tftp下载到内存,

再从内存中搬移到flash中,

启动时,再从flash中搬移到内存,

再从内存中启动

移植步骤 

0、通过SD方式启动uboot进入FS6818界面

1、将三段镜像代码放到tftpboot文件

cp /mnt/hgfs/share/ubootpak.bin /home/hq/tftpboot

cp /mnt/hgfs/share/uImage /home/hq/tftpboot

cp /mnt/hgfs/share/ramdisk.img /home/hq/tftpboot

修改文件权限为最大:

chmod 777 ubootpak.bin

chmod 777 uImage

chmod 777 ramdisk.img

2、移植uboot

tftp 0x48000000 ubootpak.bin

update_mmc 2 2ndboot 0x48000000 0x200 0x78000

3、移植内核镜像ulmage和radisk.img

 tftp 0x48000000 uImage

mmc write 0x48000000 0x800 0x4000

tftp 0x48000000 ramdisk.img

mmc write 0x48000000 0x20800 0x20800

4、设置 bootcmd命令,从flash中启动系统

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

saveenv

5、设置 自启动的参数 bootargs

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

saveenv

 设置好了上电重启,完成启动

相关文章:

系统移植 (以将Linux系统移植到S5P6818开发板为例)

(本篇文章以将Linux系统移植到S5P6818开发板为例) 本文章所需要的文件在下面链接获取:https://download.csdn.net/download/a1547998353/89406544 开发环境搭建 1、安装交叉编译工具链 安装步骤: 1. 在ubuntu的家目录(~)下,创建t…...

超长正整数的加法

一、引言 在计算机科学中,整数加法是一个基础且重要的操作。然而,当面对超长正整数(即超出计算机内置整数类型表示范围的整数)时,传统的整数加法方法便不再适用。超长正整数通常使用字符串或数组来表示,每…...

C++ - 查找算法 和 其他 算法

目录 一. 查找算法: 1.顺序查找: 2.二分查找: 二. 其他算法: 1.遍历算法: 2.求和、求平均值等聚合算法。 a.求和算法: b.求平均值算法: 一. 查找算法: 1.顺序查找&#xff1…...

字符串的信号(SIGNAL)和槽(SLOT)的宏连接方式弊端

字符串的信号(SIGNAL)和槽(SLOT)的宏连接方式在 Qt 4 及早期版本中广泛使用,但这种方法确实存在一些缺点,主要包括以下几点: 类型安全性缺失:由于 SIGNAL 和 SLOT 宏接受的是字符串参…...

Kali linux学习入门

Kali linux学习入门 文章目录 Kali linux学习入门Kali Linux简介Kali Linux工具篇Kali Docker安装Docker 更换国内镜像源Kali 安装 docker compose Kali Linux文档篇Kali Linux 社区篇 Kali Linux简介 Kali Linux是专门用于渗透测试linux操作系统,它由BackTrack发展…...

selenium中,怎么判断是否已选多选框

html文件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body><p>测试勾选</p><div><input type"checkbox" name"b…...

WindowManager相关容器类

窗口中容器类介绍&#xff1a; 本节内容较多&#xff0c;建议结合前面的内容一起阅读&#xff1a; 1、addWindow的宏观概念 2、WindowManager#addView_1 3、WindowManager#addView_2 1&#xff09;、WindowContainer&#xff1a; class WindowContainer<E extends WindowC…...

零售行业运营有哪些业务场景?详解各业务场景的分析指标和维度

在当今这个数字化迅速发展的时代&#xff0c;零售行业正经历着前所未有的变革。传统的零售模式正在被新兴的技术和创新的业务场景所颠覆&#xff0c;消费者的需求和购物习惯也在不断地演变。零售行业的运营&#xff0c;作为连接消费者、产品和市场的关键环节&#xff0c;对于零…...

无锡哲讯携手SAP,赋能装备制造业数字化转型

在当今快速发展的工业4.0时代&#xff0c;装备制造业作为国民经济的重要支柱&#xff0c;正面临着前所未有的机遇与挑战。无锡哲讯智能科技有限公司凭借其深厚的行业经验和专业的SAP实施能力&#xff0c;为装备制造业提供全面的数字化解决方案&#xff0c;助力企业实现智能化、…...

TPM仿真环境搭建

文章目录 背景及注意事项一、CMake二、m4三、GNU MP Library四、TPM_Emulator五、TSS协议栈&#xff08;trousers-0.3.14.tar.gz&#xff09;六、 tpm-tools七、查看是否安装成功八、测试 TPM环境&#xff08;需要开三个终端分别运行&#xff09;8.1 启动TPM &#xff08;第一个…...

提高篇(五):使用Processing创作互动艺术:从灵感到实现

提高篇(五):使用Processing创作互动艺术:从灵感到实现 引言 互动艺术将观众从被动的观察者转变为主动参与者,通过创意编程和技术手段,让艺术品具备感知和回应的能力。Processing作为一种强大的创意编程工具,提供了丰富的功能和灵活的编程环境,帮助艺术家和设计师实现他…...

华为od-C卷100分题目-3用连续自然数之和来表达整数

华为od-C卷100分题目-3用连续自然数之和来表达整数 题目描述 一个整数可以由连续的自然数之和来表示给定一个整数&#xff0c;计算该整数有几种连续自然数之和的表达式&#xff0c;且打印出每种表达式 输入描述 一个目标整数T(1<T<1000) 输出描述 该整数的所有表达…...

Chrome 自动执行 JS 脚本 | Tampermonkey 插件

文章目录 第 1 步:安装插件 Tampermonkey第 2 步:固定到工具栏第 3 步:在网站上启用 Tampermonkey第 4 步:查看效果第 5 步:调试 JS 代码😂 背景:有个网站,每次进去都要点 3 次才能把相关页面展开。而且,页面经常会自己刷新,导致展开的页面又收回去了。【这一天天的…...

ffmplay 源码解读

stream_open 讲解 // 定义一个静态函数用于初始化并返回VideoState结构体指针&#xff0c;用于管理播放状态 static VideoState* stream_open(const char* filename, AVInputFormat* iformat) {VideoState* is; // 创建VideoState结构体指针// 分配内存并初始化VideoState结构…...

java web如何调用py脚本文件

Controller public class IndexController {RequestMapping("/pythonTest")ResponseBodypublic String pythonTest(){// 假设你的Python脚本名为script.pyString pythonScriptPath "D:\\project\\c1\\hello.py";ProcessBuilder processBuilder new Proce…...

K8s:无状态

无状态服务 无状态服务是指服务的实例之间没有持久化状态&#xff0c;每个实例都是相同的&#xff0c;可以互换使用。 调度器 ReplicationController 简称 RC是 Kubernetes 早期版本中用来确保 Pod 副本始终运行的 API 对象。它通过监控 Pod 副本的数量&#xff0c;确保任何…...

Docker 入门篇(九)-- 使用 Maven 插件 构建 Docker 镜像

在这篇教程中&#xff0c;我们将学习如何使用 Maven 插件为 Spring Boot 应用构建 Docker 镜像。我们将使用 spring-boot-maven-plugin 和 dockerfile-maven-plugin 这两个插件。 一、前提条件 已安装 Docker。已安装 JDK 8 或以上版本。已安装 Maven。 二 创建一个 Spring …...

网络协议三

数据中心 一、DNS 现在网站的数目非常多&#xff0c;常用的网站就有二三十个&#xff0c;如果全部用 IP 地址进行访问&#xff0c;恐怕很难记住 根 DNS 服务器 &#xff1a;返回顶级域 DNS 服务器的 IP 地址 顶级域 DNS 服务器&#xff1a;返回权威 DNS 服务器的 IP 地址 …...

LeetCode LRU缓存

题目描述 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中&#xff0c;则返回关键字的值&#xff0c;…...

Parallels Desktop for Mac 19.4.0更新了哪些内容?有什么改进?

带来了重新设计的共享 Mac 文件夹版本&#xff0c;这些文件夹现在是符号链接&#xff0c;像指针一样指向您的 Mac 文件夹中的文件&#xff0c;同时仍然显示在 Windows 的本地磁盘上。 修复了由于共享文件夹问题导致 NinjaTrader 无法正常启动的问题。 修复了由于共享文件夹问…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...