linux 内核ARM32启动

这篇具有很好参考价值的文章主要介绍了linux 内核ARM32启动。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基于linux4.19内核翻译理解

为了启动ARM Linux,您需要一个引导加载程序,它是在主内核之前运行的小程序。 引导加载程序被期望初始化各种设备,并最终调用Linux内核,向内核传递信息。

基本上,引导加载程序应该提供(至少)以下内容:

1.设置和初始化RAM。
2.初始化一个串口。
3.检测机器类型。
4.设置内核标记列表。
5.加载initramfs。
6.调用内核映像。

1.设置和初始化RAM

现有的引导加载程序:
强制要求
新的引导加载程序:
强制要求
引导加载程序应该找到并初始化内核在系统中用于易失性数据存储的所有RAM。它以与机器相关的方式执行此操作。(它可以使用内部算法自动定位和调整所有RAM的大小,也可以使用对机器中RAM的了解,或者任何其他引导加载程序设计者认为合适的方法。)

2.初始化一个串口

现有的引导加载程序:
可选的,推荐的
新的引导加载程序:
可选的,推荐的
引导加载程序应该初始化和启用目标设备上的一个串口。这允许内核串口驱动程序自动检测应该用于内核控制台的串口(通常用于调试目的或与目标设备通信)。

作为替代方案,引导加载程序可以通过标记列表向内核传递相关的“console=”选项,指定端口和串行格式选项,如
Documentation/admin-guide/kernel-parameters.rst.

3.检测机器类型

现有的引导加载程序:
可选的
新的引导加载程序:
除DT-only平台外,强制要求
引导加载程序应该通过某种方法检测正在运行的机器类型。无论这是硬编码的值还是查看连接的硬件的某种算法都超出了本文档的范围。引导加载程序最终必须能够向内核提供一个MACH_TYPE_xxx值(请参见 linux/arch/arm/tools/mach-types)。这应该在寄存器r1中传递给内核。

对于DT-only平台,机器类型将由设备树确定。将机器类型设置为全部为1(~0)。这不是严格必要的,但确保它不会与任何现有类型匹配。文章来源地址https://www.toymoban.com/news/detail-800977.html

--- a/linux-4.19.125/arch/arm/configs/xxx_defconfig
+++ b/linux-4.19.125/arch/arm/configs/xxx_defconfig
+CONFIG_MACH_XXX=y
 
diff --git a/linux-4.19.125/arch/arm/mach-xxx/Kconfig b/linux-4.19.125/arch/arm/mach-axera

到了这里,关于linux 内核ARM32启动的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【嵌入式Linux内核驱动】内核模块三要素与验证测试

    内核模块 Linux内核模块是一种可以动态加载和卸载的软件组件,用于扩展Linux操作系统的功能。Linux内核本身只包含了必要的核心功能,而内核模块则允许开发者在运行时向内核添加新的功能、驱动程序或文件系统支持,而无需重新编译整个内核或重新启动系统。 内核模块是

    2024年02月06日
    浏览(64)
  • 【嵌入式环境下linux内核及驱动学习笔记-(10-内核内存管理)】

    对于包含MMU(内存管理单元)的处理器而言,linux系统以虚拟内存的方式为每个进程分配最大4GB的内存。这真的4GB的内存空间被分为两个部分–用户空间 与 内核空间。用户空间地地址分布为0~3GB,剩下的3 ~ 4GB 为内核空间。如下图。 用户进程通常只能访问用户空间的虚拟地址

    2024年02月11日
    浏览(58)
  • 【嵌入式学习笔记】嵌入式基础9——STM32启动过程

    程序段交叉引用关系(Section Cross References):描述各文件之间函数调用关系 删除映像未使用的程序段(Removing Unused input sections from the image):描述工程中未用到被删除的冗余程序段(函数/数据) 映像符号表(Image Symbol Table):描述各符号(程序段/数据)在存储器中的地址、类

    2024年02月15日
    浏览(86)
  • ARM+LINUX嵌入式学习路线

    嵌入式学习是一个循序渐进的过程,如果是希望向嵌入式软件方向发展的话,目前最常见的是嵌入式Linux方向,关注这个方向,大概分3个阶段: 1、嵌入式linux上层应用,包括QT的GUI开发 2、嵌入式linux系统开发 3、嵌入式linux驱动开发 嵌入式目前主要面向的几个操作系统是,

    2024年02月02日
    浏览(64)
  • 【嵌入式Linux内核驱动】SPI子系统 | 硬件原理 | 应用编程 | 内核驱动 | 总体框架

    1.1 SPI通信协议 SPI(Serial Peripheral Interface)是由Motorola公司开发的一种通用数据总线 四根通信线:SCK(Serial Clock)、MOSI(Master Output Slave Input)、MISO(Master Input Slave Output)、SS(Slave Select) 同步,全双工 支持总线挂载多设备(一主多从) 1.2 硬件连接 多NSS独立片选方式 菊花

    2024年02月16日
    浏览(66)
  • 嵌入式Linux驱动开发 02:将驱动程序添加到内核中

    在上一篇文章 《嵌入式Linux驱动开发 01:基础开发与使用》 中我们已经实现了最基础的驱动功能。在那篇文章中我们的驱动代码是独立于内核代码存放的,并且我们的驱动编译后也是一个独立的模块。在实际使用中将驱动代码放在内核代码中,并将驱动编译到内核中也是比较

    2023年04月09日
    浏览(74)
  • 【嵌入式Linux】编译应用和ko内核模块Makefile使用记录

    在Makefile中,变量的赋值可以使用以下几种方式: = :最基本的赋值符号,表示简单的延迟展开(lazy expansion)方式。变量的值将会在使用变量的时候进行展开。 := :立即展开(immediate expansion)的赋值方式。变量的值在赋值的时候立即展开,并且在后续的使用中不再改变。

    2024年02月08日
    浏览(52)
  • ARM/Linux嵌入式面经(二):芯片原厂

    UART(Universal Asynchronous Receiver/Transmitter,通用异步收发传输器)是一种用于串行通信的协议,它使用一对传输线(TX和RX)进行双向通信。 UART通信通过串行传输数据,数据以字节为单位进行传输。每个字节由起始位、数据位、校验位和停止位组成。 当模块向UART发送数据信息时

    2024年04月10日
    浏览(45)
  • 使用VSCode clangd插件进行linux内核代码阅读和嵌入式开发

    在进行 Linux 内核代码阅读和嵌入式开发时,选择合适的开发工具至关重要。VSCode 是一个流行的跨平台编辑器,并且它的扩展生态系统非常强大。在这篇博客中,我们将介绍如何使用 VSCode Clangd 插件来提高 Linux 内核代码的阅读和嵌入式开发效率。 Clangd 是一个基于 Clang 的语言

    2024年02月09日
    浏览(51)
  • 【嵌入式环境下linux内核及驱动学习笔记-(5-驱动的并发控制机制)】

    在讨论并发前,先要了解以下几个概念:执行流,上下文,共享与临界等。 什么叫执行流: 【执行流】:有开始有结束总体顺序执行的一段代码 又称 上下文 。 上下文分类: 【任务上下文】:普通的,具有五种状态(就绪态、运行态、睡眠态、暂停态、僵死态),可被阻塞

    2023年04月21日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包