ARM:系统移植1

2023-05-16

一、系统移植的概述

【1】目的:

1、软硬件可裁剪:硬件发生变化,软件要进行裁剪,适配硬件。
2、学习linux驱动的开发,前提开发板上需要运行linux系统。移植linux内核系统到开发板上。

【2】掌握:

1、编译的流程
2、配置的流程

【3】步骤(linux和windows的对比):

1、环境的搭建-----------U盘启动盘
2、u-boot移植 -----------BIOS
3、linux内核移植--------windows内核移植
4、根文件系统移植-----C盘移植

【4】PC和开发板的连接方式

1、串口:打印内核或者uboot源码的调试信息,下载程序
2、网线:通过网线下载程序,速度快
3、miniusb:当uboot不支持网卡驱动,使用miniusb下载程序,fastboot工具

二、安装交叉编译工具链

【1】系统移植 > 交叉编译工具链
【2】编译文件介绍:

1、.i:预处理文件
2、.s:汇编文件
3、.o:机器码文件:可以在linux中运行

  • 1-3是编译环节,生成的只是机器码

4、.elf:可执行文件:需指定程序入口地址
5、.dis:反汇编文件
6、.bin:二进制文件:只有在开发板上才可以运行

【3】编译命令:

☆☆1、gcc编译:生成机器码,将(.s / .c)生成(.o)
arm-none-linux-gnueabi-gcc -c <.s或.c> -o <.o>

☆☆2、ld链接:将(.o)文件链接成可执行文件(.elf),指定程序入口地址
arm-none-linux-gnueabi-ld -Ttext=0x43c00000 <.o> -o <.elf>

3、objdump反汇编: 将(.elf)文件反汇编生成反汇编文件(.dis)
arm-none-linux-gnueabi-objdump -D <.elf> > <.dis>

☆☆4、objcopy二进制:将(.elf)文件生成二进制文件(.bin)
arm-none-linux-gnueabi-objcopy -O binary <.elf> <.bin>

5、nm: 查看可执行文件的符号表
arm-none-linux-gnueabi-nm <.elf>

6、size:查看可执行文件中各数据段的大小
arm-none-linux-gnueabi-size <.elf>

☆☆7、readelf : 查看可执行文件的头部信息
arm-none-linux-gnueabi-readelf -h <.elf>

☆☆8、strip:压缩可执行文件命令,删除符号表
arm-none-linux-gnueabi-strip <.elf>

☆☆9、addr2line:根据地址信息定位错误信息
arm-none-linux-gnueabi-addr2line -e <.elf> 0x43c01768 -a -f
常用于定位野指针或者空指针等错误信息引起的内核崩溃

三、安装tftp服务

【1】使用tftp服务通过网线下载程序到开发板上
【2】安装步骤:

1、检查是否安装了tftp服务
dpkg -s tftpd-hpa
2、安装tftp服务
ping www.baidu.com
sudo apt-get update  #更新源  
sudo apt-get install -f  #更新依赖
sudo apt-get install tftpd-hpa tftp-hpa
3、配置tftp相关环境变量
cd ~ 
mkdir tftpboot 
chmod 777 tftpboot 
tftpboot文件夹的作用?
答:将需要下载的文件,放到tftpboot目录下,当使用tftp命令下载是,tftp命令会自动的到ubuntu的tftpboot目录下找对应的要下载的文件。

4、修改tftp的环境变量
  # /etc/default/tftpd-hpa
  # tftp服务
  TFTP_USERNAME="tftp"
  # 指定自己的tftpboot的路径
  TFTP_DIRECTORY="/home/linux/tftpboot"
  # 端口号默认为69
  TFTP_ADDRESS="0.0.0.0:69"
  # 权限相关参数
  TFTP_OPTIONS="-c -s -l"
5、重启tftp服务
sudo service tftpd-hpa restart
6、测试
tftp 127.0.0.1   #启动tftp服务
	tftp> put  文件名    
			---》 上传当前目录下的文件到tftpboot目录下
	tftp> get  文件名
			---》 从tftpboot目录下下载文件到当前目录下
	tftp> q    ---》退出tftp服务

四、安装NFS服务

【1】Network File System:通过网络的方式挂载根文件系统
【2】安装步骤:

1、检查ubuntu是否安装nfs服务
dpkg -s nfs-kernel-server
2、安装nfs服务
sudo apt-get install nfs-kernel-server
3、配置nfs相关环境变量
sudo vi /etc/exports 
# 在文件的末尾添加以下内容:
/home/linux/nfs/rootfs *(w,sync,no_subtree_check,no_root_squash)
# nfs服务从这个路径下挂在跟文件系统
# *:所有的用户
# sync:同步
# no_subtree_check:不检查子目录的权限
# no_root_squash:如果客户端时root用户,具有相同的访问权限
4、在家目录下创建nfs文件	
cd ~
mkdir nfs 
chmod 777 nfs 
# 在"系统移植资料/镜像/rootfs-ok.tar.bz2 "文件中
# 拷贝压缩包到nfs文件夹下
tar -vxf rootfs-ok.tar.bz2
5、重启nfs服务
sudo  service nfs-kernel-server restart 
6、测试
# 将根文件系统挂载到/mut目录下
sudo mount -t nfs 192.168.1.222:/home/linux/nfs/rootfs /mnt 
# 取消根文件系统的挂载
sudo umount /mnt 

五、bootloader

【1】1、概念:引导加载linux内核的启动,是所有启动程序的总称
2、u-boot / uboot:是bootloader的一种
【2】u-boot常用命令:要在倒计时结束前按任意键进入交互模式
1、help:帮助手册
2、loadb:

loadb 内存起始地址
使用kermit协议

3、go:启动程序

go 内存起始地址

4、printenv/print/pri:打印u-boot的环境变量

pri

baudrate :波特率
bootargs :自启动参数 (后边详细讲解)
bootcmd :自启动命令 (后边详细讲解)
bootdelay :启动倒计时时间
gatewayip :网关
ipaddr :开发板IP地址
netmask :子网掩码
serverip :ubuntu服务器的IP地址

5、增加环境变量

eg:
setenv board_name s5p6818
@ 注意:名字间不要有空格,名字和值之间的"="自动填充
saveenv @保存环境变量,如果不保存会掉电丢失

6、删除环境变量

setenv board_name
saveenv

7、修改环境变量

setenv bootdelay 10
saveenv

8、md:查看内存地址中的值

md 内存地址

9、nm:修改内存地址中的值

nm 内存地址

10、tftpboot/tftp:下载程序

11、ping:检查开发板与linux是否联通

【3】tftp的使用
1、步骤:
1)安装tftp服务
2)关闭windows防火墙
3)修改电脑的有线网卡为百兆全双工

控制面板 > 网络和 Internet > 网络和共享中心 > 更改适配器设置 > 以太网(PCIE)右键属性 > 网络窗口 >点击配置 > 高级窗口 > Speed & Duplex > 修改为:100MBPs Full Duplex > 确定

4)ubuntu IP地址的设置网段和windows的网段保持一致

设置开发板uboot中以下几个环境变量
gatewayip :网关
ipaddr :开发板IP地址
netmask :子网掩码
serverip :ubuntu服务器的IP地址

setenv gatewayip 192.168.1.1 		
setenv ipaddr    192.168.1.222 		
setenv netmask   255.255.255.0 		
setenv serverip  192.168.1.250
saveenv

5)测试是否可以ping通
FS6818# ping 192.168.1.250
成功:
Speed: 100, full duplex
Using dwmac.c0060000 device
host 192.168.1.250 is alive

2、使用tftp命令下载程序:
1)首先将.bin文件拷贝到~/tftpboot目录下
学习ARM阶段的代码,拷贝一个.bin文件到tftpboot。
2)tftp下载程序
FS6818# tftpboot 0x43c00000 interface.bin
或者
FS6818# tftp 0x43c00000 interface.bin

		出现以下内容,表示下载成功:
		Speed: 100, full duplex
		Using dwmac.c0060000 device
		TFTP from server 192.168.1.222; our IP address is 192.168.1.250
		Filename 'interface.bin'.
		Load address: 0x43c00000
		Loading: T T T T T #
				 0 Bytes/s
		done
		Bytes transferred = 9032 (2348 hex)
		FS6818#
		
		注意: 
		T  : 超时(TIMEOUT)
		
		解决思路:
			*1. 重启tftp服务即可,
			sudo service tftpd-hpa restart 
			重启tftp服务的命令会经常使用到。
			2. 检查开发板是否可以ping通ubuntu。
			
	3)运行程序 
		FS6818# go 0x43c00000
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ARM:系统移植1 的相关文章

  • golang为什么用协程而不是线程

    当协程阻塞的时候 xff0c 运行时会自动将同一操作系统线程上的其他协程移动到另一个可运行的线程上 xff0c 这样这些协程就不会阻塞 xff0c 并且这个操作对开发人员来说是透明的 调用协程的开销很小 xff0c 大概只在内存的栈区用几K
  • golang从channel读数据的各种情况

    文章目录 用var定义channel且不make用var定义channel且make直给写操作加for直给读操作加for读写都加for读channel的第二个返回值关闭channel继续读写完然后关闭channel再开始读加个selectc
  • 一个小技巧:修改swagger源码让postman更好用

    本文假设你知道swagger xff0c 并且会用go generate swagger generate spec o swagger json生成json 首先生成的swagger json是可以直接导入到postman的 xff0c
  • rancher导入集群时证书报错

    rancher导入集群时证书报错 现象 导入集群时 xff0c cattle cluster agent报错如下 xff1a time 61 34 2022 06 28T08 00 28Z 34 level 61 error msg 61
  • goland远程调试k8s上容器

    goland远程调试k8s上容器 上次也遇到过一次需要在k8s的容器里debug程序的情况 xff0c 当时找了个偷懒的办法绕过去了 xff0c 这回绕不过去了 xff0c 老老实实整一把 主要还是用dlv配合goland的远程调试功能 选
  • 星际争霸2免修改器修改绝对一劳永逸

    那年那个冬天 xff0c 那是的我还是个那么纯洁的同学 长话短说 xff0c 就那个寒假百无聊赖的玩了玩星际争霸2单机模式 xff0c 然后各种被虐 劳资表示不服 xff0c 于是开启上帝模式打开游戏安装目录 随后将各种模式下的cpu玩家海
  • kali 简单版攻击WiFi(附详细教程)

    首先检查是否有无限网卡 在root终端输入ifconfig xff0c 检查是否有wlan0 然后分为以下几个步骤 xff08 review专用 xff0c 没有基础就看下面详细教程 xff09 1 输入airmon ng start wl
  • 【Android自助餐】Handler消息机制完全解析(一)Message中obtain()与recycle()的来龙去脉

    Android自助餐 Handler消息机制完全解析 xff08 一 xff09 Message中obtain 与recycle 的来龙去脉 Android自助餐Handler消息机制完全解析一Message中obtain与recycle的
  • 锐捷网络交换机配置命令大全

    欢迎关注微信公众号 xff1a 厦门微思网络 关注我 xff0c 你的眼睛会怀孕 基本配置 gt Enable 进入特权模式 Exit 返回上一级操作模式 End 返回到特权模式 write memory 或copy running con
  • 【Docker】搭建nextcloud私有网盘并映射外网

    背景 家里的老式电脑闲置着 xff0c 试着用docker 43 nextcloud搭建一个自己的网盘 xff0c 但是搭建完了用frp外网映射完了 xff0c 域名访问被限制 提示信息如下 xff1a 通过不被信任的域名访问请联系您的管理
  • 【Windows】解决.bat文件无法打开的问题

    以管理员身份打开cmd xff0c 输入assoc bat 61 batfile xff0c 回车
  • 【SpringBoot】banner在线生成网站

    1 文字转文本 https www bootschool net ascii 2 文字转文本 http www network science de ascii 3 图片转文本 https www degraeve com img2txt
  • 【deepin】安装x11vnc和xrdp,使用windows远程deepin

    一 环境准备 1 已安装deepin xff08 虚拟机或物理机 xff0c 安装教程自行查询 xff0c 很简单 xff09 xff0c 此处用的社区版deepin20 1做测试 xff08 目前已更新到20 2 xff09 2 启用ro
  • 【Python】使用nexus搭建使用pip仓库

    搭建环境 1 安装nexus3 参考 xff1a Maven 使用nexus搭建maven私有仓库 2 创建Blob Stores Name xff1a pypi Path xff1a 选择存储路径 3 创建Repositories代理 点
  • 【前端】使用nexus搭建本地npm仓库

    搭建环境 1 创建Blob Stores Name xff1a npm 2 创建Repository 创建npm hosted xff0c 填写Blob store xff1a npm 创建npm proxy xff0c 填写Blob st
  • 【Docker】docker指定mac地址启动

    1 使用命令 mac address 61 ae ac ae 71 1c 2c 2 启动示例 docker run d restart 61 always mac address 61 ae ac ae 71 1c 2c name redi
  • 【ICE学习】IceBox管理服务(C#)

    前提条件 xff1a 已安装VS2012和ICE3 5 1 xff0c ICE安装包 xff1a https download csdn net download xmzmqx 12928570 安装搭建环境比较简单 xff0c 请自行百度
  • 1.4编程基础之逻辑表达式与条件分支

    01 判断数正负 总时间限制 1000ms 内存限制 65536kB 描述 给定一个整数N xff0c 判断其正负 输入 一个整数N 109 lt 61 N lt 61 109 输出 如果N gt 0 输出positive 如果N 61 0
  • ubuntu kylin 14.04 中文切换到英文

    1 修改 etc default locale文件 LANG 61 34 en US UTF 8 34 LANGUAGE 61 34 en US en 34 2 修改 etc environment文件 LANG 61 34 en US U
  • 结构体嵌套与结构体指针

    struct和typedef struct 首先是结构体的定义格式 分三块来讲述 xff1a 1 首先 xff1a 注意在C和C 43 43 里不同 在C中定义一个结构体类型要用typedef typedef struct Student

随机推荐

  • python源设置及查看

    记录一下 python 设置源及查看方法 xff1a span class token comment 查看设置 span python m pip config list span class token comment 设置源 span
  • linux环境C++执行bash脚本

    所需头文件 xff1a include lt stdio h gt 例如 xff0c 希望执行脚本 mkdir testDir C 43 43 Code xff1a FILE fp 61 popen 34 mkdir testDir 34
  • Visual Studio 远程调试设置

    VisualStudio远程调试很方便 xff0c 设置也非常简单 远程调试器安装 安装VisualStudio时默认就会安装远程调试器 xff0c 所以一般无需单独安装 被连接方设置 被连接方需要打开远程调试器 xff0c 它位于目录Re
  • 【windows11系统进行ubuntu系统安装详细步骤】

    windows11系统进行ubuntu系统安装详细步骤 2022年新购入一台win11台式电脑 xff0c 进行python的学习经历 xff0c 教程里边要求安装linux系统 xff0c 所以从网上搜索如何安装ubuntu系统 xff0
  • Win7远程控制fedora ——通过xrdp

    原文地址 http blog sohu com s MTU5MTY3OTE1 302888160 html 最近要分析RDP协议的相关东西 xff0c 然后需要抓包 xff0c 实验室空着的电脑只有Fedora系统了 xff0c 就找了一下
  • 解决Win10/11 WSL 子系统 WslRegisterDistribution failed with error: 0x800701bc 错误

    原因 xff1a wsl1升级到wsl2之后 xff0c 内核却没有升级 xff0c 所以会出现这种错误提示 xff01 解决方法 xff1a 1 下载最新的wsl安装包 2 安装包下载后 xff0c 直接运行安装即可 xff01 3 下载
  • 分布式事务之Seata AT 事务

    1 Seata介绍 Seata 是一款开源的分布式事务解决方案 xff0c 致力于提供高性能和简单易用的分布式事务服务 Seata 将为用户提供了 AT TCC SAGA 和 XA 事务模式 xff0c 为用户打造一站式的分布式解决方案 1
  • Vue引用Element-UI时,组件无效果解决方案

    问题 xff1a Vue在使用Element UI组件的时候 xff0c 已经安装好依赖 span class token operator gt span npm install element span class token oper
  • C语言:编译成可执行程序的步骤

    1 预处理 xff08 头文件的展开 xff0c 宏的替换 ifdef else endif xff09 gcc E test c o test i 2 编译 xff08 生成汇编文件 xff0c 对词法和语法进行检查 xff09 gcc
  • 服务器蓝屏的原因及解决办法

    硬件故障 xff1a 1 散热问题 2 内存主板问题 3 电源问题 4 显卡问题 解决办法 xff1a 1 清理下灰尘 xff0c 风扇 xff0c 温度高会蓝屏 2 检查内存 xff0c 新机器后加的内存是不是不兼容 xff0c 拔插下内
  • 在 CentOS 8 中使用 KVM 安装 Windows 10

    在 CentOS 8 中使用 KVM 安装 Windows 10 本文地址 xff1a blog lucien ink archives 514 使用 esxi 的话总觉得有些别扭 xff1f 故尝试 KVM xff0c 本文使用 Cent
  • 树莓派初始化备忘

    树莓派初始化备忘 本文地址 xff1a blog lucien ink archives 515 最近又开始折腾树莓派了 xff0c 记录一下初始化一个树莓派需要做的一些操作 本次操作以 64 位 Raspberry Pi OS xff08
  • 树莓派禁用 Wi-Fi 和蓝牙

    树莓派禁用 Wi Fi 和蓝牙 本文地址 xff1a blog lucien ink archives 516 因为我的树莓派是直接通过网线连接的 xff0c 并没有启用 Wi Fi xff0c 所以在每次 SSH 连进去之后 Raspbi
  • 树莓派安装 OMV

    树莓派安装 OMV 本文地址 xff1a blog lucien ink archives 517 终究还是忍住了 xff0c 没有出手买 x86 的 NAS xff0c 选择自己折腾树莓派 xff08 因为实在是太穷了 xff09 1 初
  • 树莓派安装 docker 和 docker-compose

    树莓派安装 docker 和 docker compose 本文地址 xff1a blog lucien ink archives 518 因为总是频繁地初始化树莓派 xff0c 所以把安装 docker 的过程也记录下来 1 安装 doc
  • 打印 Go Test 的代码覆盖

    打印 Go Test 的代码覆盖 本文地址 xff1a blog lucien ink archives 520 使用方法 将这段代码复制进 zshrc 或者是 bashrc 等文件中 xff08 取决于你的命令行 xff09 xff0c
  • Typecho HTTPS 无法登陆后台

    Typecho HTTPS 无法登陆后台 本文地址 xff1a blog lucien ink archives 523 背景 因为百度云加速的 HTTPS 证书各种难用 xff0c 最近将博客的 CDN 解决方案整体迁移至 Cloud F
  • git 显示中文

    git 显示中文 本文地址 xff1a blog lucien ink archives 524 默认情况下 xff0c git 会对中文进行转译 xff0c 具体表现如下 xff1a span class token function g
  • 在 PVE 中安装 OpenWrt

    在 PVE 中安装 OpenWrt 本文地址 xff1a blog lucien ink archives 525 最近在捣腾 x86 软路由 xff0c 入门方案一般是底层采用 ESXi 或 PVE xff0c 虚拟层使用 iKuai 4
  • ARM:系统移植1

    一 系统移植的概述 1 目的 xff1a 1 软硬件可裁剪 xff1a 硬件发生变化 xff0c 软件要进行裁剪 xff0c 适配硬件 2 学习linux驱动的开发 xff0c 前提开发板上需要运行linux系统 移植linux内核系统到开