一、uboot常用命令与环境变量

1.命令:

(1)环境变量操作命令

命令
功能格式
printenv
查看环境变量printenv
setenv新建/修改环境变量setenv 环境变量名 环境变量值
saveenv保存环境变量saveenv

(2)内存操作命令

命令
功能格式示例
md显示内存值
md[.b,.w,.l] address [#of objects]
md.b 80000000 14
nm修改指定地址的内存值
nm[.b,.w,.l] address
nm.l 80000000
mw
使用个指定的数据填
充一段内存
mw[.b,.w,.l] address value [count]
mw,l 80000000
0A0A0A0A 10
cp
数据拷贝命令
cp[.b,.w,.l] source target count
cp.l 80000000
80000100 10
cmp
比较两段内存数据是否 相等
cmp [.b,.w,.l] addr1 addr2 count
cmp.l 80000000
80000100 10

(3)网络命令

(4)mmc操作命令

注意:千万不要写SD卡或者EMMC的前两个块(扇区),里面保存着分区表!

(5)boot命令

分区表

room固件 = 分区表

二、工程管理Makefile

1.语法

要生成的文件 : 依赖的所有文件

        生成的方式

2.步骤

make - > Makefile \makefile -> 寻找文件中要生成的目标a.out - >寻找以来的所有的文件 - > 存在就利用命令生成目标文件、不存在,Makefile向下寻找依赖文件的生成方式

3.符号说明

  • :=     覆盖原来的值
  • ?=   如果原来没有值,就赋新值,原来有值,不赋新值  
  • +=   原来值的基础上新加一个值

伪指令:.PHONY

示例代码

4.分类处理(不同的平台)

条件编译1

        

gcc main.c -D

makefile传参

三、Uboot

1.Uboot编译

 (1)uboot(跨平台)作用

  •         初始化硬件设备
  •         为加载内核做准备

(2)使用宏实现条件编译,满足条件的加入编译中,不满足的从编译中去除

        最顶层目录.config 配置文件(宏的配置,如果宏配置到该文件中,则代码加入uboot编译);

(3)make V=0 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16

        当前平台为ARM,工具链为arm-linux-gnueabihf-,开启16核编译

        ubootuboot.bin ->uboot.imx

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean                //清除.config
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-   mx6ull_alientek_emmc_defconfig        //按照板子默认的来
make V=0 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16        //生成。bin文件

2.Linux系统启动流程

Uboot第一阶段:在芯片内部SRAM进行

(1)开发板上电,加载0x0地址,IMX6ULL96k出厂固件代码(ROM),会根据启动方式将对应的存储设备前面的一段uboot代码加载到RAM中执行

(2)出厂固件代码以及uboot通过IMX6uLL内部的RAM;只能完成简单操作

(3)对外设初始化(初始化DDR和EMMC)

(4).将IMX6ULL 96K ROM固件代码搬移到 DDR中运行

Uboot第二阶段:可对代码进行运行,实现与用户的交互

(5)外设逐一初始化

(6)进入与用户交互的系统中,等待用户按下按键

(7)如果用户不操作uboot,倒计时结束后,会执行bootcmd

(8)引|导启动内核 ( 需要串口、需要网口、文件系统的方式及路径、需要设备树... )

内核启动阶段:(加载驱动和五大功能实现的展开)

(9)内核启动执行init进程 ( 0号内核进程 ,挂载文件系统)

Linux系统用户态

(10)启动用户进程(fork+exec)启动所有的进程

(11)启动终端(可以与用户实现交互

三、内核与设备树文件

1.步骤

(1)源码解压

(2)进入源代码中

(3)编译生成.bin

  • make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean //清楚之前编译的文件
  • make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx_alientek_emmc_defconfig //以这次的imx_alientek_emmc_defconfig的设置作为.config设置,.config决定了额那些代码加入编译、那些嗲吗从编译中去除
  • make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig //用户可以通过界面自行选择或者修改.config
  • make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j16         //编译-J16

(4)编译完成后可以获得设备树文件和内核镜像文件

        设备树文件:        arch/arm/boot/dts/imx6ull-alientek-emmc.dtb

        内核镜像镜像:        arch/arm/boot/zImage

(5)将以上两个文件(内核镜像、设备树文件)拷贝到 ~/tftpboot

2.make menuconfig

* 驱动项编译生成的zImage中包含该驱动项驱动(静态加载)
M 驱动项
编译生成的zImage中不包含该驱动项,该驱动将会成为一个独立的模块
驱动(动态加载)

(1)打开图像界面 - > 图形界面的配置项(根据Kconfig中语法解析得到)

Kconfig决定了menuconfig中有哪些选项,make menuconfig可以写进.config

(2)勾选/去除/模块选择编译目标 -> 根据用户勾选将对应的宏写入.config        宏名 = y/m

(3)make -j16编译的时候,顶层的makefile会调用每一层的makefile,每层makefile都会根据.config中的宏的配置决定哪些.o文件加入编译,哪些.o文件不加入编译 ---> vmlinux(可以调试的内核,体积很大)->Image(对vmlinux压缩后的镜像文件) ----> zImage(添加解压算发的Image)


四、文件系统

1.文件系统生成工具

  • busybox:最核心最简单,如果需要下载,需要自己搭建
  • buildboot:
  • yacto

2.流程

内核启动后 ->挂载文件系统 ->执行linuxrc ->/etc/initab脚本(决定系统启动执行哪些脚本、重启执行哪些脚本、ctrlaltdel执行哪些脚本)->系统启动执行 /etc/init.d/rcS脚本 ->设置环境变量、参数->挂载所有文件系统(mount-a)->执行/etc/fstab文件-> 挂载所有文件系统 ->/etc/profile脚本 ->启动bash shell ->与用户交互 ->./a.out ->fork+exec(./a.out)

3.自动启动

把代码放在/etc/profile 或者 /etc/init.d/rcS下,就可实现一启动运行里面代码;

五、系统移植重点总结

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EasyExcel 合并单元格最佳实践:基于注解的自动合并与样式控制

EasyExcel 合并单元格最佳实践:基于注解的自动合并与样式控制 前言 在日常开发中,我们经常需要导出 Excel 报表,而合并单元格是提升报表可读性的常见需求。本文将介绍如何基于 EasyExcel 实现智能的单元格合并功能,通过自定义注解…

Unity设置UI显示区域

系列文章目录 untiy工具 文章目录 系列文章目录 👉前言 👉一、效果图 👉二、制作过程(检测中心点位置) 👉2-1、代码实现 👉三、优化为检测整个UI四个角点 👉四、性能优化建议 👉壁纸分享 👉总结 👉前言 思路: 获取屏幕的宽度和高度,定义中间区域的范围…

Qt中用于图像缩放的核⼼⽅法QPixmap::scaled

QPixmap::scaled是Qt中用于图像缩放的核⼼⽅法,其作⽤和⽤法如下:‌一、核心作用‌‌图像尺寸调整‌根据指定尺寸对图像进⾏等⽐例或⾮等⽐例缩放,⽀持放⼤和缩⼩操作。‌保持宽高比‌通过AspectRatioMode参数控制是否保持原始图像的宽⾼⽐。…

SQL Workbench/J:一款免费开源、跨平台的通用SQL查询工具

SQL Workbench/J 是一款基于 Java 开发的免费开源、跨平台的通用 SQL 查询工具。 SQL Workbench/J 主要专注于 SQL 脚本开发和数据导入导出功能,不提供各种数据库管理功能。 功能特性 跨平台:可以在任何安装了 Java 运行时环境的操作系统上运行&#xf…

DOLO 上涨:Berachain 生态爆发的前奏?

在 Berachain 生态逐渐进入公众视野之际,Dolomite(简称 Dolomite,代币 DOLO)成为链上表现最为突出的明星协议。其代币价格在短短两个月内,从 $0.03 飙升至 $0.3,涨幅接近 10 倍。市场不仅将其视作 Berachai…

吉利汽车与芯鼎微成立联合创新实验室共谱车规级LCoS显示新篇章

2025年8月20日,吉利汽车研究院技术规划中心副主任李莉、光学实验室负责人李金桦博士等一行四人莅临芯鼎微,双方共同为"吉利汽车-芯鼎微联合创新实验室"揭牌,标志着两家企业在车载先进显示技术领域迈入深度协同创新的新阶段。 在这汽…

NPM组件 @angular_devkit/core 等窃取主机敏感信息

【高危】NPM组件 angular_devkit/core 等窃取主机敏感信息 漏洞描述 当用户安装受影响版本的 angular_devkit/core 等NPM组件包时会窃取用户的主机名、用户名、IP地址信息并发送到攻击者可控的服务器地址。 MPS编号MPS-1jf5-s6ix处置建议强烈建议修复发现时间2025-08-14投毒…

docker cuda版安装 dockercuda版安装

目录 1.一键安装docker 测试ok 2.安装cuda支持 通用的应该没问题 安装工具包 配置 runtime: 3.检查 Docker 是否支持 NVIDIA 运行时 1.一键安装docker 测试ok curl -fsSL https://get.docker.com | sh 2.安装cuda支持 通用的应该没问题 也可以搜索安装 cuda版d…

Spring发布订阅模式详解

Spring 的发布订阅模式(Publish-Subscribe Pattern)是一种基于事件驱动的设计模式,通过 "事件" 作为中间载体实现组件间的解耦。在这种模式中,"发布者"(Publisher)负责产生事件并发布&…

服务器硬件中的磁盘SSD与HDD性能区别,以及分别适用于什么业务?

SSD(固态硬盘)和 HDD(机械硬盘)是服务器中常见的存储设备类型,两者在性能、可靠性、成本等方面存在显著差异。根据这些特性,它们适用于不同的业务需求。以下是详细的对比与应用场景分析:1. SSD …

AI驱动的SEO关键词优化秘籍

内容概要人工智能技术的飞速发展正重塑SEO关键词优化领域,为从业者带来全新机遇与挑战。本文将系统解析AI如何革新关键词策略,覆盖从语义搜索深度解析到长尾词智能挖掘的核心环节。通过工具驱动的内容优化路径,读者将掌握提升流量转化率的关键…

自然语言处理(NLP)技术的发展历史

自然语言处理(NLP)作为人工智能的重要分支,其发展历程跨越了大半个世纪,从早期的规则式尝试到如今的大模型时代,技术路径不断迭代,核心目标始终是实现人机间的自然语言交互。以下从关键阶段、技术突破和标志…

Swift 解法详解 LeetCode 361:轰炸敌人,用动态规划轻松拿下

文章目录摘要描述题解答案题解代码分析代码解析示例测试及结果时间复杂度空间复杂度总结摘要 “轰炸敌人”这道题名字听起来就很带感,它其实是一个二维网格搜索问题。我们要找到一个能放置炸弹的位置,让炸掉的敌人最多。虽然题目看起来复杂,…

如何高效推进将科技创新成果转化为标准?

2024年10月26日,全国标准信息公共服务平台正式发布了国家标准《科技成果评估规范》(GB/T 44731-2024 ),并从发布之日起正式实施。这一标准的正式推出,标志着政府在推进科技成果转化、提升科技服务能力方面迈出了重要一…

CMake 快速开始

CMake 快速开始 CMake 安装 编辑环境:VS Code 编译环境:VS Code Remote SSH模式 Ubuntu 24.04 CMake 官⽅源代码下载地址:https://cmake.org/download/ CMake 官⽅英⽂ 档地址:https://cmake.org/cmake/help/latest/index.html S…

STM32F1 EXTI介绍及应用

第三章 EXTI介绍及应用 1. EXTI介绍 EXTI(External interrupt/event controller)—外部中断/事件控制器,管理了控制器的 20 个中断/事件线。每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的检测。…

Oracle SYS用户无法登录数据库-ORA-12162

错误详情 [Oracleorcl bin]$ ./sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Mon Aug 18 08:12:04 2025 Copyright (c) 1982, 2013, Oracle. All rights reserved. ERROR: ORA-12162: TNS:net service name is incorrectly specifiedOS登录解析 注意&…

【计算机视觉与深度学习实战】06基于光流算法的实时运动检测系统设计与实现——以蚊子轨迹追踪为例(有完整代码)

第一章 引言 计算机视觉作为人工智能领域的重要分支,近年来在目标检测、运动分析、行为识别等方面取得了显著进展。其中,运动检测技术作为视频分析的基础技术之一,在安防监控、交通管理、体感交互、生物行为研究等领域发挥着越来越重要的作用。光流算法作为运动检测的经典方…

国产CANFD芯片技术特性与应用前景综述:以ASM1042系列为例

摘要本文综述了国科安芯推出的国产CANFD芯片ASM1042系列的技术特性与应用前景。ASM1042系列作为一款高性能的CANFD收发器,支持5Mbps的高速通信和高达70V的总线耐压,广泛应用于汽车电子、工业控制和航空航天等领域。文中详细分析了其高速率设计、高耐压设…

偶现型Bug处理方法---用系统方法对抗随机性

在软件开发中,Bug是影响产品质量的核心问题,而偶现型Bug(Intermittent Bug)因其“时隐时现、难以复现”的特性,成为最头疼的挑战之一。这类Bug不像必现Bug那样有稳定的触发路径,可能在特定环境、特定操作序…