uboot移植之uboot和kernel的参数传递

群晖存储空间损毁不等于硬盘损坏:排查与修复实战 NAS存储系统中,物理硬盘、存储池与文件系统空间构成层级结构,任何一层出现异常都可能在管理界面汇总为“存储空间损毁”。事实上,异常断电、卷未正常挂载等软性问题也会触发这一红色告警,而存储池和硬盘SMART状态往往完全正常。理解这一机制后,用户无需急于格式化重建,通过事件日志审查、SSH确认挂载状态,再借助btrfs scrub等文件系统自愈工具,即可在数据不丢失的前提下恢复存储空间正常。该方案对家庭及小型办公环境中的群晖NAS尤其适用,特别是在供电不稳或硬盘休眠频繁的场景下,能有效规避误判风险。本文完整记录 阅读详情
从uboot启动内核的形式theKernel (0, machid, bd->bi_boot_params)
可以看出uboot给内核传递了3个参数,第1个是0,第2个是机器码,第3个是参数列表在SDRAM的起始位置
刚好满足一下调用内核的条件
• R0=0。
• R1=机器类型ID;
• R2=启动参数标记列表在RAM 中起始基地址

①在 uboot/board/tekkamanninja/mini2440/mini2440.c的board_init函数中
指定机器码
gd->bd->bi_arch_number = MACH_TYPE_MINI2440 
而MACH_TYPE_MINI2440定义在include/asm-arm/mach-types.h
#define MACH_TYPE_MINI2440             1999

需对应内核的linux/arch/arm/mach-s3c2440/mach-mini2440.c中一行代码
MACHINE_START(MINI2440, "MINI2440 test")
而MINI2440定义在linux/arch/arm/tools/mach-types
mini2440        MACH_MINI2440        MINI2440        1999

②在 uboot/board/tekkamanninja/mini2440/mini2440.c的board_init函数中
指定参数位置
    gd->bd->bi_boot_params = 0x30000100;

对应内核的linux/arch/arm/mach-s3c2440/mach-mini2440.c中一行代码
.boot_params    = S3C2410_SDRAM_PA + 0x100,
如果uboot没有给出 gd->bd->bi_boot_params的值,则linux默认去这个地址寻址tag
如果uboot给出了 gd->bd->bi_boot_params的值 ,则linux则按照uboot的给的这个地址去寻址tag

所以即使uboot中设置
    gd->bd->bi_boot_params = 0x30000000或  0x30000200 或  0x300000300 (或许设置一个空闲的内存区就可以)
而内核
的.boot_params    = S3C2410_SDRAM_PA + 0x100, (就用不到了)
也能顺利启动内核
,已试过

在试验中发现uboot中设置gd->bd->bi_boot_params
=0或将 gd->bd->bi_boot_params 注释掉,都未能顺利启动内核 。貌似在uboot 必须为gd->bd->bi_boot_params 指定一个值才行,而linux的 .boot_params 始终都没有用到。


gd是一个全局结构体指针,用于uboot中各个文件中重要的参数传递,其成员见http://blog.youkuaiyun.com/songqqnew/article/details/6847699
看一下uboot在sdram 0x30000100处给内核传递了什么东东,见http://blog.youkuaiyun.com/songqqnew/article/details/6847609
参考嵌入式Linux应用开发完全手册ch15.1 p243
转自:http://blog.youkuaiyun.com/songqqnew/article/details/6847392
CS1237卡尔曼滤波实战:如何用24位ADC实现电子秤级精度? 本文详细介绍了如何利用CS1237 24位ADC芯片结合卡尔曼滤波算法实现电子秤级精度测量。通过解析CS1237硬件特性、卡尔曼滤波原理及STM32驱动优化,提供了一套完整的解决方案,包括多通道支持、驱动代码实现和性能调优技巧,适用于工业测量和嵌入式开发领域。 阅读详情

相关推荐

逆向拆解dy接口a_bogus 1.0.1.19版本核心算法(纯算版)第二部分

本文深入解析了dy接口a_bogus 1.0.1.19版本的核心算法,重点介绍了逆向分析的基础方法论、魔改Base64编码识别与还原、随机数生成与位运算解析等关键技术。通过详细的代码示例和实用技巧,帮助开发者掌握逆向工程中的关键步骤,特别是针对a_bogus参数的生成逻辑和混淆处理。

weixin_29288313的博客 407

u-boot与linux内核间的参数传递过程分析

http://www.nishizawa23.com/ http://liuyue18301.blog.163.com/blog/static/27913282009930112920220/?fromdm&fromSearch&isFromSearchEngine=yes     U-boot会给Linux Kernel传递很多参数,如:串口,RAM,videofb、MAC地址等。而Li

BoArmy的专栏 4022

CDO批量处理nc文件:5分钟搞定CMIP6数据双线性插值(附完整代码)

本文详细介绍了如何使用CDO工具链中的`remapbil`命令,快速实现CMIP6数据的批量双线性插值处理。通过环境配置、核心操作步骤、高级优化技巧及典型报错解决方案,帮助科研人员高效处理大规模nc文件,显著提升气象数据处理效率。

weixin_29267307的博客 292

u-boot向linux内核传递启动参数(详细)

U-BOOT 在启动内核时,会向内核传递一些参数.BootLoader 可以通过两种方法传递参数给内核,一种是旧的参数结构方式(parameter_struct),主要是 2.6 之前的内核使用的方式。另外一种就是现在的 2.6内核在用的参数链表 (tagged list) 方式。这些参数主要包括,系统的根设备标志,页面大小,内存的起始地址和大小,RAMDISK的起始地址和大小,压缩的RAMDISK根文件系统的起始地址和大小,当前内核命令参数等而这些参数是通过 struct tag来传递的。U-boot

I15902020106的博客 2960

数据去重复_京东商品评论情感分析|文本数据预处理

本文爬取了十款热销手机的文本评论数据后,首先对文本评论数据做文本预处理,文本评论数据中存在大量的无价值信息,引入无用的文本数据,对其作情感分析,显然没有价值,得出的文本挖掘结果也不尽人意。所以对于文本评论数据先进行文本预处理是必不可少的一步,把大量的、冗余的、无价值的信息去除,可以极大提高文本数据的质量,精确文本分析结果。1 文本去重1.1文本去重的原因文本数据预处理时,首先应去除文本评论数据中反...

weixin_34556808的博客 2073

从零开始:TexLive(Latex)安装与配置全指南

本文提供了一份详尽的TexLive(Latex)安装与配置全指南,旨在帮助用户从零开始快速搭建LaTeX工作环境。内容涵盖从镜像下载、安装步骤详解、环境验证到高效编辑器(如VS Code)配置,并特别强调了中文排版支持与宏包管理,确保用户能顺利处理学术论文等专业文档的排版需求。

weixin_29284885的博客 903

U-Boot与kernel之间的参数传递机制完全解析

详细分析u-boot与kernel之间的bootargs传递机制,包括如何传递、解析及应用

多年芯片设计领域从业经验,负责芯片bringup以及kernel驱动开发。 5062

微信小程序 - 最新将页面可分享到朋友圈功能,小程序实现分享到朋友圈功能,开启分享给好友及分享朋友圈功能(微信小程序怎么分享到朋友圈?详细流程及示例代码教程)

没有设置过分享朋友圈功能的小程序,分享朋友圈按钮是灰色且无法点击。小程序 vue2 | vue3 版本语法都能使用,跟着教程复制代码运行即可。如下图所示,将页面开启分享后便可由用户转发出去。

🏆 前端领域优质创作者 2417

U-boot如何向kernel传递参数 + kernel如何读取参数

本文转自:http://zqwt.012.blog.163.com/blog/static/12044684201332535457347/   UBOOT版本:UBOOT2010.06 硬件环境:ARM U-boot 会给 linux Kernel 传递很多参数,例如:串口、RAM、commandline(bootargs)等。而 linux kernel 也会读取和处理这些参数。它们两

liushi558 3101

【Arduino 动手做】构建一个迷你 Las Vegas RGB LED 球体

《Arduino迷你拉斯维加斯球体项目:15岁少年的创意挑战》 15岁的Ben通过本项目展示了如何利用Arduino平台制作一个经济实惠的迷你拉斯维加斯球体夜灯。该项目涉及LED选择(采用WS2812B可编程灯带)、电子元件配置(含Arduino Nano微控制器和红外遥控)以及3D建模设计(100毫米直径球体)。项目难点包括LED布局优化、供电方案设计和3D打印外壳制作。Ben详细记录了从背景研究、电路设计到最终实现的完整过程,特别强调了分辨率与成本的平衡,以及如何通过白色扩散器改善视觉效果。这个项目不仅

雕爷学编程 1024

Python在振动信号处理中的应用(一):振动信号消除多项式趋势项

文章目录一、概述二、最小二乘法去除趋势项原理三、python模块介绍3.1 scikitlearn简介(1)转化器(Transformer)(2)估计器(Estimator)3.2 线性回归LinearRegression3.3 多项式PolynomialFeatures3.4 工作流Pipeline四、python代码实现4.1 构造模拟信号4.2 编写去除趋势项主代码4.3 展示算法效果五、TIPS 一、概述   在振动测试过程中,传感器或采集设备由于自身性能问题或受环境干扰(如温度、供电等影响),容易

白银时代的博客 8578

Hi3516DV300开发板——3.烧录过程问题、uboot相关设置及移植前准备

前言 在前一篇 Hi3516DV300开发板——2.uboot、kernel、fs文件系统烧写 之后,还是有很多坑的,比如 uboot 烧写进去后,如何根据自己手里不同的开发板,设置 bootargs 和 bootcmd 等选项。 同时最后会解决一些上一篇的小问题。 说明 bootargs 传递给内核的启动参数,告诉内核相关内容,决定内核启动后根文件系统如何挂载 bootcmd: 用于实现内核的自启动的参数传递 这里有兴趣的同学,可以去看看韦东山老师的 uboot 的分析课程,可以结合实践去分析了解。

NolanのBlog 5207

五、MT8168 音频驱动之SPEAKER

本章主要讲解MT8168平台的内部SPEAKER驱动配置。分为HP接法和LINE OUT接法。2.1.3 audio_custom_exp.h设置。2.1.4 mixer_paths.xml设置。2.2.3 mixer_paths.xml设置。2.1.2 ProjectConfig 设置。2.2.2 ProjectConfig 设置。2.2.1 deconfig设置。2.1.1 DTS设置。......

Joon2020的博客 1664

arm-linux内核start_kernel之前启动分析(1)-接过bootloader的衣钵

如果想运行和链接地址不一致,我能想到的办法,只能是汇编中尽量不去涉及一些绝对地址,使用PIC位置无关代码。 联想之前分析的uboot relocation原理,uboot在relocation之后,kernel在开启MMU之前,都实现了链接地址和运行地址不一致,看看它们用的什么方法? (1)uboot在relocation时修改rel.dyn段(存储所有变量地址),实现将所有变量地址重定位到新运行地址 (2)kernel在开启MMU之前,计算运行地址(物理地址)与链接地址(虚拟地址)的偏移,对变量寻址时都进

做一个有技术追求的人 1万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

手把手教你玩转Linux嵌入式操作系统的移植和裁剪--第二部分:内核移植实战2.2 U-Boot移植

U-Boot的主要职责是初始化硬件并加载Linux内核,同时将必要的参数传递给内核。通过以上步骤,开发者可高效完成U-Boot与内核的交互,实现嵌入式系统的稳定启动。

amy_mhd的博客 1219

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

U-boot在S3C2440上的移植详解(转载)

同时,theKernel这个函数指针是u-boot参数传递的至关点,我们知道,函数在内存中执行的时候其实就是一个地址,而在代码中首先将这个函数指针指向kernel的入口地址,最后还将0、机器码和u-boot参数项在内存中的地址带给这个入口地址,故执行这个入口地址的时候即kernel启动的时候可以有这三个参数进行接收。关于ARM工作模式和寄存器在这里就不做讲叙了,以后再讲,这里你就理解成u-boot在启动的时候把参数存放到这三个寄存器中,到内核启动时再把寄存器中的参数取出,当然,他们并不是就这样简单的操作。

lenyound的博客 686

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

linux内核跳转到文件系统,Uboot到Kernel到文件系统(Cortex_A9)移植详细文档

处理器:Exynos4412 Cortex_A9 四核一: 4412 uboot 目录: uboot基本配置编译make xxx_config编译结果如上图。Uboot启动第一阶段分析:1. cpu/arm_cortexa9/start.Shttp://blog.chinaunix.net/uid-29589379-id-5568665.html2.cpu/arm_cortexa9/u-boot...

weixin_36371504的博客 579

uboot启动阶段修改启动参数方法及分析

转载自:http://blog.youkuaiyun.com/eric41050808/article/details/9299559 作者:围补 本来启动方式这节不是什么复杂的事儿,不过想简单的说清楚明白,还真是不知道怎么组织。毕竟文字跟有声语言表达有别。但愿简单的东西别让我讲的太复杂! Arm板系统文件一般有三个——bootloader(uboot)、kernel(uImag...

weixin_30385925的博客 169

linux内核移植s3c2410,移植正式开始2

内核启动的现在已经是开始执行函数start_kernel函数了。start_kernel函数在init/main.c中定义。start_kernel函数只是完成 相应的结构的初始化任务。 printk(KERN_NOTICE); printk(linux_banner); setup_arch(&command_line); 在uboot的一直过...

weixin_30347335的博客 73

Linux总结 - 系统移植

uboot是在操作系统之前运行的一段裸机程序,主要负责初始化硬件、引导内核启动、为Linux操作系统运行提供合适的环境。

cui__OaO的博客 682

嵌入式Linux之我行——u-boot-2009.08在2440上的移植详解(六)

嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤。一为总结经验,二希望能给想入门嵌入式Linux的朋友提供方便。如有错误之处,谢请指正。<br /><br />一、移植环境主  机:VMWare--Fedora 9开发板:Mini2440--64MB Nand,Kernel:2.6.30.4编译器:arm-linux-gcc-4.3.2.tgzu-boot:u-boot-2009.08.tar.bz2<br />二、移植步骤<br />上接:u-boot-2009.08在244

qt_girl的专栏 742

tiny6410 uimage移植笔记

直接使用2.6.38.8的Mini2440的板文件,啥都不用改,直接make mini2440_defconfig,然后make zImage编译内核…… 完成,下载测试……出现问题…… 友善的文档说出现这种问题往往是因为bootloader传给内核的machine_type跟内核的不一样。但是上面明明是写着1999啊,应该没错的…… 上网搜索一番,发现原来需要在内核

linuxlj的专栏 503

移植Linux-3.4.2到开发板gq2440

移植 linux-3.4.2 笔记 1. tar -xjf linux-3.4.2.tar.bz2   cd linux-3.4.2   修改Makefile     find -name "*defconfig"   列出所有默认的开发板的配置   make s3c2410_defconfig   在顶层目录生成.config   make menuconfig   make uImage

伍宝哥的专栏 1501

4.1uboot设备树传递机制解析——从dtb加载到内核启动全流程

本文详细解析了uboot设备树传递机制,从dtb加载到内核启动的全流程。通过分析设备树在嵌入式系统中的作用、uboot加载设备树的完整流程、bootm命令的工作机制以及内核接收设备树的过程,帮助开发者深入理解硬件配置与内核启动的关键环节。文章还提供了常见问题排查技巧和实际项目中的优化实践,如设备树压缩与解压、多重设备树备份机制等,提升系统可靠性和存储效率。

weixin_30892037的博客 477

uboot启动内核笔记

uboot启动内核过程

chegxy的博客 975
上一篇: U_BOOT_CMD 命令数据结构
下一篇: automake中的AC_ARG_WITH和AM_CONDITIONAL使用示例
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值