Linux内核初始化
文章平均质量分 85
TrustZone_Hcoco
一个搞技术的读书人,妄图分享最干货的技术知识与世界运转的底层逻辑。公ZH:TrustZone
展开
-
底软驱动 | U-boot驱动模型
id = UCLASS_SERIAL, //设置对应的uclass id,并且存放在.u_boot_list_2_uclass_2_serial段中.id = UCLASS_SERIAL, // 这里的uclass_id和 uclass_driver中的一致.of_match = s5p_serial_ids, // 设备树种的compatible属性{ .compatible = "samsung,exynos4210-uart" }, //注意这里的compatible要和设备树中的一致。原创 2024-07-21 16:14:03 · 1157 阅读 · 0 评论 -
底软驱动 | U-boot编译与配置过程
u-boot从v2014.10版本后引入kBuild系统,使得其Makefile变的更加复杂;整个Makefile中,嵌套其他不同用途的Makefile,本文将进行简单的分析.原创 2024-07-21 16:02:19 · 758 阅读 · 0 评论 -
底软驱动 | U-boot移植点点滴滴
本文介绍了U-boot的结构和使用方法。其中使用方法包括了代码下载,开发,编译,烧录uboot镜像,以及通过uboot更新内核镜像。本文介绍的U-boot包括了uboot-spl和uboot两部分。SPL是介于芯片内部rom程序与uboot之间的一个BootLoader,其主要功能为初始化ddr,系统管理器,时钟,以及加载uboot。SPL程序本身需要加载到系统内部ram中运行,是一个轻量级的uboot。在U-boot开源程序中,本身是包含SPL选项的。原创 2024-07-13 11:37:57 · 685 阅读 · 0 评论 -
【启动】芯片启动过程全解析
Hi!早,今天来和你一起聊聊芯片启动过程发生了什么。当你按下电源开关的那一瞬间,第一行代码如何在芯片上运行起来的呢?嵌入式软件代码需要一定的方式烧录到芯片中才能运行,除了物理刻蚀,无论是通讯端口的传输或者调试端口的烧录,都需要驱动程序的支持。所以说是程序烧录了程序,软件启动了软件。这就像自己提着自己的鞋带,把自己拎起来。靴子(Boot),鞋带(Strap),提鞋带(Loader)。这就是Boot Strap Loader的命名来源。通常称BootLoader,中文翻译为自举。原创 2024-04-16 10:17:02 · 2488 阅读 · 0 评论 -
完全理解ARM启动流程:Uboot-Kernel
bootloader是系统上电后最初加载运行的代码。它提供了处理器上电复位后最开始需要执行的初始化代码。PC机上引导程序一般由BIOS开始执行,然后读取硬盘中位于MBR(Main Boot Record,主引导记录)中的Bootloader(例如LILO或GRUB),并进一步引导操作系统的启动。嵌入式系统中通常没有像BIOS那样的固件程序,因此整个系统的加载启动就完全由bootloader来完成,它主要的功能是加载与引导内核映像。第一个分区:存放的当然是u-boot。原创 2024-03-20 20:08:14 · 2181 阅读 · 0 评论 -
【系统启动】Kernel怎么跳转到Android:linux与安卓的交界
kernel的启动主要分为两个阶段。原创 2023-11-30 10:47:21 · 300 阅读 · 0 评论 -
【系统启动】uboot启动流程源码分析
之前我看韦神书时,学习过uboot,知道分为两个阶段。期间对这个uboot的源码没有了解深入。最近做AVB校验,需要uboot到kernel的这个过程。这里再复习一下。与大多数BootLoader一样,uboot的启动过程分为BL1和BL2两个阶段。BL1阶段通常是开发板的配置等设备初始化代码,需要依赖依赖于SoC体系结构,通常用汇编语言来实现;BL2阶段主要是对外部设备如网卡、Flash等的初始化以及uboot命令集等的自身实现,通常用C语言来实现。原创 2023-11-30 09:19:53 · 607 阅读 · 0 评论 -
启动boot流,细节点
# 将boot流程总结下: 1.cpu执行boot rom,boot rom有两层意思,## step one+ 一是指**芯片内部固化程序的rom**(掉电不失存储介质),该介质比我们常见的存储介质昂贵即成本高。+ 二是指固化在其中的**一小段引导程序**。这段程序用于**初始化片内的一小片ram运存**即SDRAM和初始化存储介质(nor/nand/sd),这样才可以将auxiliary code(小size)从flash或者sd卡(一般为nor flash,可靠性比较高)上copy到这片内置转载 2023-05-06 22:46:48 · 247 阅读 · 0 评论 -
start.S详解学习(六):异常中断处理
此处很简单,只是一些宏定义而已。后面用到的时候再解释。.macro和后面的.endm相对应,其语法是:所以,此处就相当于一个无参数的宏bad_save_user_regs,也就相当于一个函数了。原创 2023-02-18 00:00:03 · 168 阅读 · 0 评论 -
start.S详解学习(5):清除 bss 段
即bss段的起始地址和结束地址而此段代码,含义也很清晰,那就是,先将r2,即0x0,存到地址为r0的内存中去,然后r0地址加上4,比较r0地址和r1地址,即比较当前地址是否到了bss段的结束位置,如果le,little or equal,小于或等于,上面已经注释掉的代码,此处忽略。原创 2023-02-17 23:43:07 · 897 阅读 · 0 评论 -
start.S详解学习(四):设置堆栈 sp 指针
APCS,ARM 过程调用标准(ARM Procedure Call Standard),提供了紧凑的编写例程的一种机制,定义的例程可以与其他例程交织在一起。最显著的一点是对这些例程来自哪里没有明确的限制。它们可以编译自 C、 Pascal、也可以是用汇编语言写成的。对寄存器使用的限制。使用栈的惯例。在函数调用之间传递/返回参数。可以被‗回溯‘的基于栈的结构的格式,用来提供从失败点到程序入口的函数(和给予的参数)的列表。那对于C语言,为何就需要堆栈,而汇编却不需要堆栈的原因?原创 2023-02-17 23:02:40 · 2107 阅读 · 0 评论 -
start.S详解学习(三):关闭中断
上面这几行代码,和前面的很类似,作用很简单,就是将INTMSK寄存器设置为0xffffffff,即,将所有的中断都mask了。关于每一位的定义,其实可以不看的,反正此处都已mask了,不过还是贴出来,以备后用:此处,关于mask这个词,解释一下。mask这个单词,是面具的意思,而中断被mask了,就是中断被掩盖了,即虽然硬件上中断发生了**,但是此处被屏蔽了,所以从效果上来说,就相当于中断被禁止了,硬件上即使发生了中断,CPU也不会去执行对应中断服务程序ISR了。**原创 2023-02-17 00:31:17 · 387 阅读 · 0 评论 -
Watchdog是什么?为什么要在系统初始化时候关闭什么是 watchdog?
watchdog 一般是一个硬件模块,其作用是,在嵌入式操作系统中,很多应用情况是系统长期运行且无人看守,所以难免或者怕万一出现系统死机,那就杯具了,这时,watchdog 就会自动帮你重启系统。那么其是如何实现此功能的呢?那么就要简单解释一下其实现原理了。原创 2023-02-15 23:50:42 · 4462 阅读 · 0 评论 -
start.S详解学习(二):关闭看门狗
伪指令,就是“伪”的指令,是针对“真”的指令而言的。真的指令就是那些常见的指令,比如上面说的arm的ldr,bic,msr等等指令,是arm体系架构中真正存在的指令,你在arm汇编指令集中找得到对应的含义。而伪指令是写出来给汇编程序看的,汇编程序能看的伪指令具体表示的是啥意思,然后将其翻译成真正的指令或者进行相应的处理。原创 2023-02-15 23:42:01 · 530 阅读 · 0 评论 -
start.S详解学习(一):设置 CPU 模式
去修改了IRQ_STACK_START ,FIQ_STACK_START ,FREE_RAM_END和FREE_RAM_SIZE的值。至于为何这么修改,后面遇到的时候会具体再解释。同上,原创 2023-02-15 23:01:01 · 440 阅读 · 0 评论 -
ARMv8架构u-boot启动流程详细分析
首先引用wiki上的简介:u-boot 是一个主要用于嵌入式系统的引导加载程序,可以支持多种不同的计算机系统结构。u-boot最先是由德国DENX软件中心团队开发,后续众多有志于开放源码bootloader移植工作的嵌入式开发人员将各个不同系列嵌入式处理器的移植工作不断展开和深入,以支持了更多的嵌入式操作系统的装载与引导。开放源码;支持多种嵌入式操作系统内核的引导,如Linux、NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS, android;转载 2022-12-09 22:02:20 · 830 阅读 · 0 评论 -
【ATF】bootloader与安全相关启动分析
这个文章的内容不只是指的ATF启动这个部分,其实ATF是TF-A,这个是一个启动框架,所以今天我们来看看bootloader这部分的启动代码。后续继续补充!!!第一部分参考的内容来自:https://mp.weixin.qq.com/s/hBeSNXXAuomVvQIBajpS5Q(感谢前辈)ARM架构中,EL0/EL1是必须实现,EL2/EL3是选配,ELx跟层级对应关系:EL0 – appEL1 – Linux kernel 、lkEL2 – hypervisor(虚拟化)EL3 – ARM trust原创 2022-12-08 00:43:48 · 1367 阅读 · 0 评论 -
cmdline(一):cmdline是什么?&&cmdline怎么添加?
cmdline(一):cmdline是什么?&&cmdline怎么添加?原创 2022-11-27 14:34:39 · 5040 阅读 · 0 评论 -
cmdline(二):uboot cmdline怎么传?&&cmdline kernel怎么用?
cmdline(二):uboot cmdline怎么传?&&cmdline kernel怎么用?原创 2022-11-27 14:32:02 · 1864 阅读 · 0 评论 -
双核Linux内核的引导
最后再整一篇多核的引导,称热打铁引导Linux系统的过程包括很多阶段,这里将以引导ARM Linux为例来进行讲解(见图3.11)。一般的SoC内嵌入了bootrom,上电时bootrom运行。对于CPU0而言,bootrom会去引导bootloader,而其他CPU则判断自己是不是CPU0,不是就进入WFI的状态等待CPU0来唤醒它。CPU0引导bootloader,bootloader引导Linux内核,在内核启动阶段,CPU0会发中断唤醒CPU1,之后CPU0和CPU1都投入运行。CPU0导致用户空间原创 2022-10-26 23:56:31 · 692 阅读 · 0 评论 -
BootLoader这个玩意
有了前面的概念和源码描述,这里进行最后的总结。1)初始化看门狗。2)初始化时钟。3)初始化串口。4)设置CPU模式的栈指针,进入SVC模式。5)初始化RAM。6)初始化MMC控制器,并将内核映像从MMC设备中读到0x48000000处的RAM地址中。7)清除BSS段。8)做好调用内核前的准备工作。9)跳转到RAM中的内核的第一条指令,引导过程完成。(SVC和SYS的区别知道吗?我们在UBoot的内容学习过)原创 2022-10-26 23:46:08 · 4615 阅读 · 0 评论 -
U-BOOT小全(六):BootLoader源码(UBoot-Kernel 1)
我们挑拣一些重点代码来说明。原创 2022-10-23 00:43:01 · 1100 阅读 · 0 评论 -
U-BOOT小全(五):BootLoader源码(SPL-UBoot 2)
前面我们分析到了s_init函数,现在继续。然后调用s_init来进行更多模块的初始化。函数s_init在arch/arm/cpu/armv7/sunxi/board.c中定义,代码如下。在该函数内部,**对watchdog、时钟、定时器timer和gpio进行初始化,并对console终端进行初始化,然后进行i2c的初始化,**最后调用sunxi_board_init函数,该函数在board/sunxi/board.c中定义,代码如下。该函数首先对DRAM进行初始化,然后利用前面初始化的i2c来对ax原创 2022-10-22 22:22:41 · 1256 阅读 · 0 评论 -
U-BOOT小全(四):BootLoader源码(SPL-UBoot 1)
对于概念性我们有了一定的了解以后,来瞅瞅UBoot的源码。不过在这之前,整个图来回以一下前面讲的UBoot的启动跳转和硬件布局。BootRom引导SPL,SPL引导U-Boot,然后U-Boot再引导内核。下面我们来看看这个源码是什么样子的?原创 2022-10-22 21:17:19 · 1334 阅读 · 0 评论 -
U-BOOT小全(三):SPL框架
ARM的启动流程:(RomBoot是固化在SoC内部的。因为芯片厂商固化的ROM支持从nandflash, SDCARD等外部介质启动,所以RomBoot会根据硬件电路的启动模式选择读取对应介质一小段数据到内存。RomBoot读取多少才算合适呢?每个用户的需求不一样,大小也不能确定。很多芯片厂商干脆就只读4K/8K/16K等很小一段数据。这段数据你可以存放芯片初始化,读取介质数据到内存的工作是完全没有问题的。就这样在我们的软件界就产生了一个SPL概念,RomBoot读取这一小段代码就叫spl。原创 2022-10-21 00:37:41 · 2240 阅读 · 0 评论 -
U-BOOT小全(二)
前面在大概了解U-Boot及其目录结构后,就可以开始配置和编译U-Boot了。在U-Boot源码中有一个README文件,它描述了如何配置并编译U-Boot。(其实很多都有,只不过是英文的,哈哈哈)原创 2022-10-21 00:11:02 · 683 阅读 · 0 评论 -
U-BOOT小全(一)
前面或多或少的写过一点关于Uboot的东西,当然内容基本上都是学习笔记,学习前辈们的博客和书籍,但是整的很乱,不成体系。或者内容都是很简要的,总感觉仿佛对UBoot知道了点什么,但是又什么都不知道。不爽。于是这里找到了一本书,好好整一下这个UBoot。这次对于UBoot的学习就开始慢下脚步,好好找找问题所在。不要着急,一点点学。原创 2022-10-19 07:50:59 · 513 阅读 · 0 评论 -
uboot启动流程源码分析(二)
上一篇找到了我的关键点–main_loop函数,这一篇来好好看一下。uboot中的main_loop函数是怎么工作的。原创 2022-10-19 07:24:53 · 833 阅读 · 0 评论 -
uboot启动流程源码分析(一)
其实前面我学习韦神的书的时候,学习过uboot,知道分为两个阶段。期间对这个uboot的源码没有了解深入。最近坐AVB校验,需要uboot到kernel的这个过程。这里再学习一下。与大多数BootLoader一样,uboot的启动过程分为BL1和BL2两个阶段。BL1阶段通常是开发板的配置等设备初始化代码,需要依赖依赖于SoC体系结构,通常用汇编语言来实现;BL2阶段主要是对外部设备如网卡、Flash等的初始化以及uboot命令集等的自身实现,通常用C语言来实现。原创 2022-10-19 00:07:23 · 2311 阅读 · 0 评论 -
Linux内核学习(八):linux内核配置与模块
内核的配置是开发的第一步,前面我kconfig那篇讲了内核这些配置怎么生成的。当时也提到了内核配置的一个图形化的界面,这里再来啰嗦几句。本文内容全部来自《奔跑吧linux内核》原创 2022-07-24 21:30:10 · 2974 阅读 · 0 评论 -
Linux内核学习(七):linux kernel内核启动(一):概述篇
架构/开发板相关的引导过程、后续的通用启动过程。如图16.7所示是ARM架构处理器上Linux内核vmlinux的启动过程。之所以强调是vmlinux,是因为其他格式的内核在进行与vmlinux相同的流程之前会有一些独特的操作。比如对于压缩格式的内核zlmage,它首先进行自解压得到vmlinux,然后执行vmlinux开始“正常的”启动流程。...原创 2022-07-23 19:16:39 · 716 阅读 · 0 评论 -
Linux内核学习(六):linux kernel的Kconfig分析
内核的配置界面以树状的菜单形式组织,主菜单下有若干个子菜单,子菜单下又有子菜单或配置选项。每个子菜单或选项可以有依赖关系,这些依赖关系用来确定它们是否显示。只有被依赖项的父项已经被选中,子项才会显示。Kconfig文件的语法可以参考。...原创 2022-07-23 19:04:50 · 1673 阅读 · 0 评论 -
Linux内核学习(五):linux kernel源码结构以及makefile分析
在配置内核时,生成配置文件.config(具体过程后续会将)。内核顶层Makefile使用如下语句间接包含.config文件,以后就根据.config中定义的各个变量决定编译哪些文件。之所以说是“间接”包含,是因为包含的是include/config/auto.conf文件,而它只是将.config文件中的注释去掉,并根据顶层Makefile中定义的变量增加了一些变量而已。这个built-in.o文件将被它的上一层Makefile使用。要编成库文件的内核代码一般都在这两个目录下。...原创 2022-07-23 16:48:52 · 9844 阅读 · 2 评论 -
Linux内核学习(四):Bootloader的特种兵-Uboot(二)
内容全部来自韦神《嵌入式Linux应用开发完全手册》在上一篇的Linux内核学习(三)Bootloader的特种兵-Uboot(一)中我们学习了关于Uboot的介绍、源码结构以及配置和编译的过程,到这一章我们来看看U-Boot的启动过程源码的分析。很多的时候会把系统文件那些放在flash,然后运行的时候加载到内存中,然后启动。这个加载的过程就是需要UBOOT来完成。那Uboot本身的位置放在哪里呢?...原创 2022-07-23 11:27:00 · 882 阅读 · 0 评论 -
Linux内核学习(三):Bootloader的特种兵-Uboot(一)
U-Boot,全称为UniversalBootLoader,即通用Bootloader,是遵循GPL条款的开放源代码项目。其前身是由德国DENX软件工程中心的WolfgangDenk基于8xxROM的源码创建的PPCBOOT工程。后来整理代码结构使得非常容易增加其他类型的开发板、其他架构的CPU(原来只支持PowerPC);增加更多的功能,比如启动Linux、下载S-Record格式的文件、通过网络启动、通过PCMCIA/CompactFLash/ATAdisk/SCSI等方式启动。开放源码。......原创 2022-07-23 00:29:00 · 611 阅读 · 0 评论 -
Linux内核学习(二):Bootloader
可以增强Bootloader的功能,比如增加网络功能、从PC上通过串口或网络下载文件、烧写文件、将Flash上压缩的文件解压后再运行等,这就是一个功能更为强大的Bootloader,也称为Monitor。实际上,在最终产品中用户并不需要这些功能,它们只是为了方便开发。Bootloader的实现非常依赖于具体硬件,在嵌入式系统中硬件配置千差万别,即使是相同的CPU,它的外设(比如Flash)也可能不同,**所以不可能有一个Bootloader支持所有的CPU、所有的电路板。**即使是支持CPU架构比较多的。.原创 2022-07-22 22:45:00 · 1834 阅读 · 1 评论 -
linux内核学习(一):linux 内核镜像生成与加载
这里整理了linux内核镜像的生成与加载,是通过uboot加载。原创 2022-07-21 23:21:52 · 930 阅读 · 0 评论