uboot移植步骤

article/2025/10/6 17:11:41

Uboot移植具体步骤(本例子为Samsung origen板)

第一步:准备源码

网上下载现成的uboot开源代码:https://ftp.denx.de/pub/u-boot/
在该网站中选择与板子兼容的uboot源文件(公司中一般咨询硬件工程师)
在Linux系统下解压
tar xf 压缩包名

第二步:修改源码

1.抄板:将和你板子兼容的文件复制一份文件
cd u-boot-2013.01/board/samsung/
cp origen fs4412 -r
2.直接执行make fs4412,如下错误:
在这里插入图片描述
说明在make的时候不认识fs4412这个文件夹,需要自行添加。执行以下命令:
grep origen . -r 显示如下结果图:
在这里插入图片描述
通过该命令即可找到配置文件夹为/boards.cfg,然后进入该文件
vim boards.cfg 在该文件夹中添加如下句段:
fs4412 arm armv7 fs4412 samsung exynos
3.准备就绪后执行make fs4412,出现以下错误:
在这里插入图片描述
为找到fs4412.h文件,原因在于我们复制了origen文件夹,但是在整个项目中有origen.h文件而却没有fs4412.h的头文件,所以我们需要将头文件也复制一份:
find -name origen.h
该命令可以找到文件的路径为./include/configs/origen.h
cp /include/configs/origen.h /include/configs/fs4412.h
再执行make fs4412,此时应该就可以编译成功生成二进制文件uboot.bin
4.此时生成的二进制文件并不能完全运行,原因在于本次的例子板子为Samsung的芯片,要想我们烧写的uboot程序被芯片识别则需要三星的签名和加工编译的源码才能实现,该加工留着下一步说明,现在我们就算编译加工成功了任然无法正常运行该uboot。
此时我们应该学会进行板子调试:调试的方法即检查uboot文件是否被执行,我们需要找到文件的起始文件,那么如何查看起始文件呢?
4.1 uboot.lds为连接文件即文件执行的首选文件可以在该文件中看到
vim uboot.lds
在这里插入图片描述
可以看到目标起始文件为arch/arm/cpu/armv8/start.o
进入该文件夹cd arch/arm/cpu/armv8/
找到文件的开始b reset
在reset函数中加入一段代码,作用在于证明uboot被执行(该代码可以是亮灯)
然后调试uboot源文件哪里需要修改删除或者添加代码即可
5.就算uboot启动了我们还需要打开网卡驱动已经其他的一些常用的系统命令的编辑。
从下载下来的文件中有一个common的文件夹,该文件夹中存放着一些系统文件,这些文件有些在配置里面被编译,有些没被编译,被编译出来的会生成一个.o文件,我们才看这个目录下的文件的时候发现网络cmd_net.c并没有被编译生成.o文件,所以默认的网络并不能启动,我们要做的就是修改配置将文件进行编译即可。
方法:
5.1进入驱动的文件目录:cd drivers
5.2查找网卡的名字 find -name *9000*(网卡的名字在芯片设计图中可以得知,或者直接询问)
在这里插入图片描述
获得以下的文件,进入文件cd /net在net目录下我们编译的时候会有一个MakeFile文件来统一执行编译命令,所以我们可以通过查看该文件确认文件怎么执行
找到文件中存在一个宏定义CONFIG_DRIVER_DM9000
我们搜索到这个宏定义并没有定义出来,所以在默认编译的时候MakeFile文件不会将该模块编译出来,导致无法启动网卡。
5.3 我们需要在fs4412.h的头文件中全局搜索CONFIG_DRIVER_DM9000将该宏定义未定义改为#define
以上做完之后编译无法通过因为文件中的网卡管脚在你自己开发板的具体实现还未完成,需要自己编写一部分网卡管脚代码才能编译通过。(难点:具体怎么添加和添加什么代码需要结合自己的板子来开发)
6.以上步骤完成uboot移植基本完成。
追加知识点:
如果需要人为的为系统增加命令那么需要在common文件夹下新建一个自己的命令.c文件文件书写格式可以参考该文件夹下的任何一个.c文件,最后如果想要该文件被编译,必须在该路径下的MakeFile中定义
COBJS-y += 文件名.o该语句中的文件名表示你创建的.c文件,-y表示必须被编译

总结:
1.选中和自己板子适配的uboot启动文件,拷贝一个完全一样的文件夹
2.观察主MakeFile下的文件编译方法,调整并编译拷贝的文件夹,可以编译通过生成一个二进制xx.bin文件。
3.如果编译然后烧写到SD卡中该文件可以直接启动则为最理想的状态,如果不能启动,需要我们对uboot的启动进行修改,直到成功启动,看见uboot操作界面。(这一步参考上面的第四点)
4.看见操作界面后某些功能无法启用,比如网络等,则需要我们根据自己手上的板子来针对性的编写程序,以完成一个完整的uboot移植。(这一步为该步骤中的重难点)

第三步:编译并加工源码(这一步的具体内容仅适应Samsung的origen)

编译: root@ubuntu:~/u-boot-2013.01# make fs4412 加工:
1.将工具文件夹拷到u-boot-2013.01目录
root@ubuntu:~/u-boot-2013.01#
cp /mnt/hgfs/E/class/201201/code/day3/tool_bin/ . -r
2. 进入工具文件夹执行mk_uboot.sh
root@ubuntu:~/u-boot-2013.01# cd tool_bin
root@ubuntu:~/u-boot-2013.01/tool_bin# ./mk_uboot.sh
//放开注释cp
…/u-boot.bin .

第四步:烧写测试

将生成好的img镜像文件通过SD卡烧写工具烧写进去即可。


http://chatgpt.dhexx.cn/article/3JVwMMOC.shtml

相关文章

(二)uboot移植--从零开始自制linux掌上电脑(F1C200S)<嵌入式项目>

目录 一、前言 二、F1C200s上电启动顺序 三、前期准备 四、新建用户 五、交叉编译环境配置 六、uboot简介 七、uboot移植 🍏 uboot下载 🍏 uboot默认配置 🍏 uboot图形界面配置 🍏 uboot编译 🍏 烧录bin…

U-Boot 移植初探

1. NXP官方开发板uboot编译测试 uboot移植不需要从零开始将uboot移植到使用的开发板上。因为半导体厂商通常都会自己做一个开发板, 将uboot移植到他们自己的原厂开发板上,再将这个uboot(原厂BSP 包)发布出去。因此使用自已的开发…

U-Boot移植

一、U-Boot Linux 系统要启动就必须需要一个 bootloader 程序,芯片上电以后先运行一段bootloader程序。 bootloader程序会先初始化DDR等外设,然后将Linux内核从flash(NAND,NOR FLASH, SD, eMMC 等)拷贝到 DDR 中&…

uboot移植

一、我们知道uboot就是一个Bootloader。但是,arm不像我们的pc机一样,用一个老毛桃随便找一个网站下一个windows镜像就可以直接装了。 我们的uboot对应的就是老毛桃里面刷的引导程序。 虽然uboo支持很多架构很多不同的厂家的板子,但是UBOOT它…

【Linux】系统移植篇四--uboot移植

系统移植篇四--uboot移植 一、uboot源码结构1、uboot源码获取2、uboot特点3、uboot源码结构 二、uboot的配置与编译1、uboot配置2、uboot编译 前言:本篇主要介绍uboot的一些结构与相关配置,uboot是一款免费开源的芯片启动软件,代码完全开源&a…

uboot移植过程

uboot移植过程 IMX6ULL 文章目录 uboot移植过程 IMX6ULL 前言一、从原厂中移植uboot进行测试二、在U-Boot中添加自己的硬件1. 添加默认配置文件2. 添加对应的头文件3. 添加对应的板级文件夹3.1 修改Makefile文件3.2 修改 mx6ull_alientek 目录下的 imximage.cfg 文件3.3 修改 m…

MediaCodec对接到OMX的简单分析

一、引言: nuplayer播放器是使用MediaCodec来进行编解码的,而OMX组件则是MediaCodec的解码核心,但是因为涉及的面太过底层,往往是芯片公司才会涉及到这一块,所以就做一个简单分析,对通路有个大致了解就行。…

MediaCodec(native)状态机分析

一、引入: MediaCodec这条通路的调用逻辑是MediaCode->ACodec->OMX,因为OMX有自己的状态机,所以MediaCodec和ACodec也分别基于OMX组件的调用维护了其状态机,这篇博客就先分析MediaCodec的状态机是如何运转的。 二、MediaCo…

视频-MediaCodec

1.解析视频可以使用android 提供的api MediaPlayer,实现简单的播放暂停,提取视频中的一帧或者编辑视频,需要另一个api MediaCodec(硬解,控制DSP芯片)或者 ffmpeg(软解,耗时),选择的优先级一定要…

MediaCodec解析MP4视频

MediaCodec讲解 MediaCodec是Android提供的用于对音视频进行编解码的类,它通过访问底层的codec来实现编解码的功能。是Android media基础框架的一部分,通常和 MediaExtractor, MediaSync, MediaMuxer, MediaCrypto, MediaDrm, Image, Surface和AudioTra…

Android视频编解码之MediaCodec简单入门

本篇只是简单入门,后面会继续写文章详细讲解: 由于MediaCodec涉及内容众多,原本想一篇文章把所有内容概括,但是后来发现不太可能,限于自己能力,想要考虑全面太难,我也是刚开始学习需要借助网上…

Android:MediaCodec基本原理

最近需要使用MediaCodec做一些工作,因此对MediaCodec做了些研究和代码编写,在此先对MediaCodec的一些基础原理、工作流程、常用API等做个初步总结,方便后续开发过程中查阅。 1.MediaCodec简介 1.1 MediaCodec来历 Android从最初的API 1.0版…

MediaCodec原理及使用

使用MediaCodec目的 MediaCodec是Android底层多媒体框架的一部分,通常与MediaExtractor、MediaMuxer、AudioTrack结合使用,可以编码H264、H265、AAC、3gp等常见的音视频格式 MediaCodec工作原理是处理输入数据以产生输出数据 MediaCodec工作流程 Medi…

Android MediaCodec

Android中可以使用MediaCodec来访问底层的媒体编解码器,可以对媒体进行编/解码。 MediaCodec可以处理的数据有以下三种类型:压缩数据、原始音频数据、原始视频数据。这三种类型的数据均可以利用ByteBuffers进行处理,但是对于原始视频数据应提…

android P MediaCodec编解码流程分析

1.MediaCodec初始化流程分析 通过上面流程分析可知,MediaCodecList初始化是通过调用它的getLocalInstance函数,然后在里面new的MediaCodecList对象。在MediaCodec的CreateByType函数中new了MediaCodec对象。 allocateNode调用流程是在ACodec.cpp中的onA…

MediaCodec_Analyze-3-start

MediaCodec Analyse – start Refrence: https://source.android.google.cn/devices/media 一 APK调用的核心API Android APK使用 MediaCodec API 播放音视频的简易流程: MediaCodec codec MediaCodec.createDecoderByType("video/avc"); MediaFormat …

mediacodec api

mediacodec api 官网: https://developer.android.com/reference/android/media/MediaCodec 中文: https://www.apiref.com/android-zh/android/media/MediaCodec.html 学习mediacodec api的使用说明,在android源码查看: andro…

MediaCodec硬解流程

一 MediaCodec概述 MediaCodec 是Android 4.1(api 16)版本引入的低层编解码接口,同时支持音视频的编码和解码。通常与MediaExtractor、MediaMuxer、AudioTrack结合使用,能够编解码诸如H.264、H.265、AAC、3gp等常见的音视频格式。MediaCodec在编解码的过…

MediaCodec_Analyze-1-create

MediaCodec Analyse – create Refrence: https://source.android.google.cn/devices/media 一 APK调用的核心API Android APK使用 MediaCodec API 播放音视频的简易流程: MediaCodec codec MediaCodec.createDecoderByType("video/avc"); MediaFormat…

mediacodec

MedaiCodec简介 MediaCodec是Android中提供的音视频编/解码工具。它主要是完成上层接口的封装,供给开发者使用,编解码功能实际是在native底层服务中完成的 MediaCodec工作流程 包括两个缓冲区队列 一个输入缓冲区队列,包含一组输入缓冲区(格…