Linux系统移植一:移植U-BOOT 添加自己的板子并编译(非petalinux版)

news2024/9/25 19:19:22

Linux系统移植流程

之前一直用官方给的Linux系统文件,没有自己系统地移植过,故整理一遍
不使用petalinux工具,尽管它提升了开发效率,但是不利于学习移植过程

嵌入式Linux系统移植主要由四大部分组成:

  1. 搭建交叉开发环境
  2. bootloader的选择和移植
  3. kernel的配置、编译、和移植
  4. 根文件系统的制作

本文主要来移植 bootloader,最常用的是U-BOOT ,下面就让我们开始吧

环境

  1. hdf设计:vivado 2017.4套件
  2. 交叉编译环境: arm-linux-gnueabihf-
  3. 虚拟机Linux系统版本:ubuntu 16.04
  4. 开发板:ALINX AX7Z100 开发板(ZYNQ7100)

SDK由hdf文件得到设备树文件

下载设备树源码

下载地址为:https://github.com/Xilinx/device-tree-xlnx/tags,我这里下载的是2017.4版本的

准备hdf文件

vivado里面设计,编译导出生成hdf文件

生成设备树文件

  1. 解压设备树源码,拷贝到SDK安装目录下
    在这里插入图片描述
    2.windows下打开SDK,工具栏 Xilinx–>Preferences 配置Repositories, New一个,添加刚才的设备树源码路径
    在这里插入图片描述
    3.新建BSP (File–>new–>Board Support Package),选择hdf文件,finish
    在这里插入图片描述
    4.生成device tree,finish,弹出一个BSP settings窗口,默认选项,然后OK
    在这里插入图片描述
    5.在device_tree_bsp_0目录下查看生成的设备树文件,红框内的文件后续还有用
    请添加图片描述

U-BOOT的移植

下载u-boot源码

下载地址为:https://github.com/Xilinx/u-boot-xlnx/releases,我这里下载的是2017.4版本的

添加自己的板子

1.解压源码 tar -zxvf u-boot-xlnx-xilinx-v2017.4.tar.gz
2.拷贝上一节 device_tree_bsp_0 目录下查看生成的设备树文件到 /arch/arm/dts 目录下,并重命名 system-top.dtszynq-ax7z100.dts
3.修改设备树文件 zynq-ax7z100.dts ,根据板子和自己的需求配置
4.进入/include/configs目录下,拷贝一份zynq-common.h cp zynq-common.h ax7z100-common.h, 然后修改ax7z100-common.h

修改uImage为image.ub ,配置ipaddr和serverip

在这里插入图片描述

改sdboot

在这里插入图片描述

5.进入/include/configs目录下,拷贝一份zynq_zc70x.h cp zynq_zc70x.h zynq_ax7z100.h
然后修改 zynq_ax7z100.h 中 #include <configs/zynq-common.h>#include <configs/ax7z100-common.h>
6.进入/arch/arm/dts ,修改Makefile,找到 dtb-$(CONFIG_ARCH_ZYNQ) 配置,增加 zynq-ax7z100.dtb,如图

在这里插入图片描述
7.进入configs目录下,拷贝一份配置文件
cp zynq_zc702_defconfig zynq_ax7z100_defconfig 设计参考Xilinx官方的zc702开发板,ax7z100是我的开发板名字
修改zynq_ax7z100_defconfig,主要修改项及说明如下

# 1. head file in "include/configs/zynq_ax7z100.h"
CONFIG_SYS_CONFIG_NAME="zynq_ax7z100"
# 2. u-boot start delay for 5s
CONFIG_BOOTDELAY=5
# 3. device tree file in arch/arm/dts/zynq-ax7z100.dts
CONFIG_DEFAULT_DEVICE_TREE="zynq-ax7z100"
# 4. u-boot start banner
CONFIG_IDENT_STRING="ALINX AX7Z100 by HAMMER"
# 5. boot command
CONFIG_BOOTCOMMAND="run default_bootcmd"
# 6. UART BASE ADDRESS
CONFIG_DEBUG_UART_BASE=0xe0000000

8.uboot支持图形界面配置,修改 /arch/arm/mach-zynq/Kconfig 文件 ,找到 config SYS_CONFIG_NAME ,修改
如下
在这里插入图片描述

编译u-boot

新建一个脚本 zynq_uboot_gen.sh ,写入内容

#!/bin/bash 
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean 
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zynq_ax7z100_defconfig 
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j8
chmod +x zynq_uboot_gen.sh
./zynq_uboot_gen.sh

编译成功之后,会在u-boot源码根目录生成以下文件,其中 文件 u-boot 是我们所需要关注的

在这里插入图片描述

测试U-BOOT

准备hw文件夹

来自于Vivado工程SDK文件夹下的 xxx_wrapper_hw_platform_0 文件夹,将该文件夹复制到 u-boot 根目录下

在这里插入图片描述

准备tcl文件调试linux内核

u-boot 根目录下新建一个linux.tcl文件,,用来下载 fgpa 的 bitstream 文件和 uboot 的 elf 文件以启动linux内核
内容如下

connect 
source zynq7100_wrapper_hw_platform/ps7_init.tcl
targets -set -filter {name =~"APU*" && jtag_cable_name =~ "Digilent*"} -index 0
rst -system 
after 3000
targets -set -filter {jtag_cable_name =~ "Digilent*" && level==0} -index 1 
fpga -file zynq7100_wrapper_hw_platform/design_1_wrapper.bit
targets -set -filter {name =~"APU*" && jtag_cable_name =~ "Digilent*"} -index 0 
loadhw -hw zynq7100_wrapper_hw_platform/system.hdf -mem-ranges [list {0x40000000 0xbfffffff}] 
configparams force-mem-access 1
targets -set -filter {name =~"APU*" && jtag_cable_name =~ "Digilent*"} -index 0
ps7_init 
ps7_post_config
targets -set -nocase -filter {name =~ "ARM*#0"} 
dow u-boot
configparams force-mem-access 0
targets -set -nocase -filter {name =~ "ARM*#0"} 
con 

准备tcl文件调试u-boot

新建一个名为uboot.tcl的文件。当我们只是调试uboot,不启动内核的时候或没有使用 fpga 部分时启动内核的时候,可使用该文件,内容如下

connect 
source zynq7100_wrapper_hw_platform/ps7_init.tcl 
targets -set -filter {name =~"APU"} 
loadhw zynq7100_wrapper_hw_platform/system.hdf
stop 
ps7_init
targets -set -nocase -filter {name =~ "ARM*#0"} 
rst -processor 
dow u-boot 
con

下载u-boot测试

  1. 设置开发板启动模式为 JTAG,连接串口并打开串口软件
  2. 上电,ubuntu连接 JTAG 的 USB 接口
  3. 配置petalinux环境变量,输入命令 xsct uboot.tcl 下载u-boot文件调试

运行过程及结果

在这里插入图片描述
成功下载u-boot到开发板 Successfully downloaded /home/hammer/work/u-boot/u-boot-xlnx-xilinx-v2017.4/u-boot

串口输出

在这里插入图片描述
第一行输出是zynq_ax7z100_defconfig文件中自定义的Banner ALINX AX7Z100 by HAMMER
第二行输出是设备树文件zynq-ax7z100.dts设置的model
serveripIP address 对应 ax7z100-common.h 文件的修改项

成功启动了u-boot,移植完成!

资源文件下载

我已经将本文中涉及的相关文件上传至我的github仓库 https://github.com/Huge-Hammer/linux-system-porting/tree/main/u-boot
有需要自行下载,但仅供参考

结束语

写这篇文章的初衷是不想用petalinux编译u-boot并且想自定义自己的板子,综合了很多教程写的,可能存在错误,还望大家批评指正

我是爱学习的诸葛铁锤,下期见,see you!

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

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

相关文章

【计算机网络】实验四 应用层和传输层协议分析(PacketTracer)

一.实验目的 通过本实验&#xff0c;熟悉PacketTracer的使用&#xff0c;学习在PacketTracer中仿真分析应用层和传输层协议&#xff0c;进一步加深对协议工作过程的理解。 二.实验内容 研究应用层和传输层协议 从 PC 使用 URL 捕获 Web 请求&#xff0c;运行模拟并捕获通信…

健身用什么耳机比较好、五款适合健身房运动的耳机推荐

大家都运动本身是一件特别枯燥无味的事情&#xff0c;尤其是一个人在健身房沉浸式撸铁的时候&#xff0c;而听音乐是大多数人缓解枯燥的首选&#xff0c;不过在健身的过程中拥有一款既要音质好、又要适合运动佩戴防水防汗的耳机可就不那么容易了。今天给大家推荐几款最佳的运动…

如何在lnmp中实现PHP多版本共存

背景&#xff1a;one框架需要swool扩展&#xff0c;同时php版本需要7.3&#xff0c;目前服务器安装的是lnmp1.6其中php5.6. 所以觉得安装一个php7.3作为切换版本 &#xff0c;以下是安装步骤 1.查找lnmp的install.sh文件&#xff0c;一般在/root/lnmp1.5/install.sh 下执行命令…

【Docker】Compose容器编排:微服务实战

Docker-Compose是Docker官方的开源项目&#xff0c; 负责实现对Docker容器集群的快速编排。是一个工具软件&#xff0c;可以 管理多个 Docker 容器 组成一个应用。你需要 定义一个 YAML 格式的配置文件docker-compose.yml &#xff0c;写好多个容器之间的调用关系。然后&#x…

GeoTools快速入门

本文将帮助读者获取GeoTools的源代码并进行编译。下载源代码并进行编译有助于读者对GeoTools建立整体性的理解&#xff0c;帮助读者厘清GeoTools的模块划分。同时因为GeoTools是一个开源类库&#xff0c;读者在实际使用中遇到的一些问题可以通过直接阅读GeoTools源代码来进行解…

vue3+ts项目中封装3d单柱柱状图

vue3ts项目中封装单柱的柱状图 成品图 下载echarts npm i echarts 封装组件为Barchart.vue文件 <template> </template><script setup lang"ts"> import { nextTick, watch } from vue import echarts from /assets/ts/echarts; import useRes…

[附源码]计算机毕业设计在线项目管理Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

十三、Vue CLI(2)

本章概要 项目结构编写一个 Hello 组件package.json 13.4 项目结构 通过 Vue CLI 生成的项目的目录结构及各文件夹和文件的用途说明如下&#xff1a; |--node_modules //项目依赖的模块 |--public //该目录下的文件不会被 Webpack 编译压缩处理&…

Springboot社区疫情防控系统毕业设计,社区疫情防控管理系统设计与实现,毕设作品参考

功能清单 【后台管理员功能】 关于我们设置&#xff1a;设置学校简介、联系我们、加入我们、法律声明、学校详情 广告管理&#xff1a;设置小程序首页轮播图广告和链接 留言列表&#xff1a;所有用户留言信息列表&#xff0c;支持删除 会员列表&#xff1a;查看所有注册会员信…

【树莓派开发日记2 】树莓派安装Ubuntu22系统及启动黑屏等问题的踩坑记录

树莓派安装Ubuntu22系统及启动黑屏等问题的踩坑记录 在成功进行了组装后&#xff0c;就到了最为关键的部分了&#xff0c;进行树莓派的系统烧录。虽然树莓派有自己对应的系统&#xff0c;raspbian&#xff0c;但是绝大部分的开发者还是会选择Ubuntu系统作为主要的开发系统 Ub…

软件架构模式

如果有兴趣了解更多相关内容&#xff0c;欢迎来我的个人网站看看&#xff1a;瞳孔空间 创建软件系统基本结构的原则称为软件体系结构。软件结构由软件元素及其相互关系组成&#xff0c;这些元素起着蓝图的作用&#xff0c;规划了要执行的任务的模式。软件设计团队极大地依赖于…

【java】2-串行与并发分别将计数器从1累加到10亿

串行、并行、并发 串行是100个人的队伍从一条通道里顺序通行 并行是100个人从n(n>1)条通道分别通行 并发是只有一条通道&#xff0c;100个人排成n个队伍&#xff0c;每队依次派一个人从通道通行&#xff1b;或是有m条通道&#xff0c;100个人排成n个队伍&#xff0c;各个队…

[附源码]计算机毕业设计SpringBoot心理健康系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Spark3 AQE (Adaptive Query Execution) 一文搞懂 新特性

Spark 3 AQE (Adaptive Query Execution) 序 在搭建平台的过程中&#xff0c;我们使用 CDH 6.3.2 进行搭建&#xff0c;但 CDH 中阉割掉了 spark-sql 功能&#xff0c;所以我们外挂了 Spark 3&#xff0c;补充 spark-sql 功能&#xff0c;版本为 3.3。在使用的过程中&#xff…

【抓包工具】win 10 / win 11:WireShark 下载、安装、使用

目录 一、WireShark 下载 二、WireShark 安装 &#xff08;1&#xff09;双击运行安装程序 &#xff08;2&#xff09;Choose Components&#xff1a;选择组件 &#xff08;3&#xff09;Additional Tasks&#xff1a;附加任务 &#xff08;4&#xff09;Choose lnstall …

精品基于Java的社区团购系统SSM

《基于Java的社区团购系统》该项目含有源码、论文等资料、配套开发软件、软件安装教程、项目发布教程等 使用技术&#xff1a; 开发语言&#xff1a;Java 框架&#xff1a;ssm 技术&#xff1a;JSP JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xf…

【JUC】并发编程学习笔记(二)

JUC并发编程五、多线程锁5.1、synchronized实现同步的基础5.2、公平锁与非公平锁5.3、可重入锁5.4、死锁5.4.1、概念5.4.2、案例5.4.3、查看死锁六、Callable接口6.1、概述6.2、FutureTask概述和原理6.3、案例七、辅助类7.1、减少计数CountDownLatch7.2、循环棚栏CyclicBarrier…

[HITCON CTF 2022] Superprime,rev Meow_way,BabySSS格基约减法,Secret共模攻击模未知

目录 Superprime Reverse Meow_way BabySSS Secret Superprime 这个题5层RSA加密&#xff0c;很简单就是要带条件爆破5组p,q&#xff0c;一开始看错了&#xff0c;对为5组是一一对应的&#xff0c;回头发现后边两对不是对应的。 from Crypto.Util.number import getPrime,…

[附源码]Python计算机毕业设计Django旅游度假村管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

计算程序运行时间:计算或者不计算sleep()的两种情况perf_counter()和process_time()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 计算程序运行时间&#xff1a; 计算或者不计算sleep()的两种情况 perf_counter()和process_time() [太阳]选择题 对下面描述错误的选项为&#xff1f; import time print(使用perf_counter…