uboot学习
<( ̄︶ ̄)Okay.
<( ̄︶ ̄)↗[GO!]
展开
-
uboot分析之启动内核
nand read.jffs2 0x30007fc0 0x00060000(kernel分区首地址) 0x00200000(大小)(2)在uboot中grep bootcmd,返回值s=nvt_boot。(1)上电先找环境变量bootcmd,bootcmd=nvt_boot。(3)找到添加的命令do_nvt_boot_cmd,并找到对应函数。(6)MTDPARTS_DEFAULT 定义了起始地址和大小。从NAND读出内核:从哪里读?(5)解析出nvt_boot命令,执行函数。(9)查看nand指令。原创 2023-04-03 20:13:14 · 336 阅读 · 0 评论 -
uboot分析之命令
3.cmd下makefile添加 obj-y += cmd_update.o。1.cd ./u-boot/cmd 目录创建一个文件cmd_hello.c。2.添加基本的命令和函数。原创 2023-03-28 20:27:23 · 94 阅读 · 0 评论 -
uboot分析2
【代码】uboot分析2。原创 2023-03-28 19:56:59 · 89 阅读 · 0 评论 -
uboot分析之第一阶段
8.清bss段(BSS(Block Started by Symbol)通常是指用来存放程序中未初始化的全局变量和静态变量的一块内存区域。特点是:可读写的,在程序执行之前BSS段会自动清0。所以,未初始的全局变量在程序执行之前已经成0了。3.设置SP,sp指向某块内存(因为要调用c函数,就要使用栈)初始化lowlevel_init(初始化存储控制器),7.将uboot代码从flash拷贝到SDARM中去。2.把程序从Nand flash 拷贝到 SDAM。1.设置svc(超级用户)模式。原创 2023-03-22 20:22:35 · 291 阅读 · 0 评论 -
uboot学习Makefile之编译过程
包含的头文件config.mk,这个文件是在配置过程生成的,在编译阶段使用的到。(1)u-boot第一个文件cpu/mp5xxx/u-boot/start.S。u-boot---->u-boot.bin(最终生成的文件)(2)链接脚本board/canmb/u-boot.lds。里面比较重要的一个文件时链接脚本u-boot.lds,地址0x00000000+0x33f80000。下面中变量值,执行完make后可以看到。:顶层uboot目录config.h。定义了ARCH架构,cpu架构,原创 2023-03-21 20:42:33 · 164 阅读 · 0 评论 -
uboot学习之Makefile之配置过程
那么$(@:_config=)就是将smdk2410_config中的_config替换为空!如果定义了BUILD_DIR,则OBJTREE就为BUILD_DIR,如果没有定义就为CURDIR。$(@:_config=) @代表的是target smdk2410_config,这里可以看到BUILD_DIR 没有定义,所以SRCTREE == OBJTREE。(1)安装交叉编译工具arm-linux-gcc,否则编译报错。意思为创建链接文件asm指向asm-arm文件夹。config.h的内容。原创 2023-03-21 19:15:30 · 531 阅读 · 0 评论 -
uboot打补丁,编译,烧写,实验
6.为了完成开发,uboot还要添加更多的功能:写flash功能,网卡,usb等功能(因为可以通过sd卡,以太网,usb,串口等烧写程序)。1.pc:BIOS—>引导操作系统windows—>识别C盘,D盘–>运行各种程序,qq,微信等。嵌入式操作系统:bootloader–>linux内核–>挂载根文件系统–>应用程序。7.硬件初始化:关看门狗–>初始化时钟–>初始化SDRM–>从FLASH读取内核。5.从flash中读出内核放到SDRM中—>启动内核。3.解压缩–>打补丁–>配置–>编译–>烧写。原创 2023-03-14 20:35:17 · 207 阅读 · 0 评论 -
协处理器cp15
CP15访问CP15寄存器的指令在基于ARM的嵌入式应用系统中,存储系统通常是通过系统控制协处理器CP15完成的。ARM处理器使用协处理器CP15的寄存器来控制cache(极高速缓存),TCM(高速缓存)和存储管理。CP15包含16个32位寄存器,其编号位0~15。CP15访问CP15寄存器的指令MCR ARM寄存器到协处理器寄存器的数据传送MRC 协处理器寄存器到ARM寄存器的数据传送MCR指令和MRC指令只能在处理器模式为系统模式时执行,在用户模式下执行MCR指令和MRC指令将会触发未定义指令的原创 2022-06-12 23:54:54 · 155 阅读 · 1 评论 -
cpsr寄存器
设置cpsr寄存器为svc模式(特权模式)CPSR:程序状态寄存器(current program status register) cpsr在用户级编程时用于存储条件码;CPSR包含条件码标志,中断禁止位,当前处理器模式以及其他状态和控制信息。mrs指令功能:将状态寄存器的内容传送至通用寄存器。mrs r0,cpsr; 将cpsr寄存器的内存放在r0寄存器中;bic指令功能:bit clear位清除指令;示例:bic R0,R0,#0x1F;//将R0最低5位清零,其余位不变;orr指令原创 2022-06-12 23:24:28 · 902 阅读 · 0 评论 -
start.S文件分析
34800000:是这句代码的内存地址,是在Makefile中定义的。ea000014:将该汇编代码汇编成机器指令,就是0,1代码,就是uboot.bin这种二进制机器代码。异常向量结束标志保证2处地址是16字节对齐这个宏的意思是uboot被拷贝到ddr内存中的起始地址。b和blb:就是跳转不带跳回的;bl:先执行b跳转,然后将下一条指令的地址装入pc指针,这样就会跳回来,继续运行下一条指令。mov pc ,lr...原创 2022-06-08 23:46:46 · 114 阅读 · 0 评论 -
ARM三级流水线
ARM处理器三级流水操作(PC寄存器)ARM处理器3级流水线:取指–>译码–>执行,这3级流水线循环执行;在R15(PC)中,我们一般以正在执行的指令作为参考点;在执行当前指令的同时也对第二条指令译码,第三条指令在取指;实际来说PC指针就是指向正在取值的地址,也就是当前正在执行的指令地址加上2条指令的地址。对于32位arm处理器来说,每条指令就是4个字节;即PC = 当前执行的程序地址 + 8字节。...原创 2022-06-08 10:04:11 · 854 阅读 · 0 评论 -
异常向量的地址映射问题
地址映射图0x0000_0000~0X0000_FFFF 是Internal ROM内容,即芯片出厂固化在芯片中的程序,不能改的。我们的镜像会被加载在BL1的地方,b reset的地址是0xD002_0010,ldr ,pc, undefined_instruction的地址是0xD002_0014。exception vector tablearm开辟的一块异常向量表将异常向量表拷贝到这里,即下面部分;我们在程序中定义好异常处理程序,当发生异常时,会到异常向量表中,再跳到你自己定义的异原创 2022-06-07 23:45:37 · 140 阅读 · 0 评论 -
异常与中断
异常比中断的优先级高,中断可以屏蔽,但异常是一定要去处理的。1.undefined_instructionCPU遇到了不认识的指令,则会进入未定义指令异常处理函数,因为CPU不认识该指令,所以通常CPU遇到非法指令,则无法继续执行,会使内核崩溃panic。但在崩溃前会操作系统会打印一些debug信息,供工程师分析。undefined instruction2.software_interrupt软中断,一般用在系统调用,用用户模式进入保护模式,或者是超级用户模式。3.prefetch_abor原创 2022-06-06 23:38:41 · 393 阅读 · 0 评论 -
S3C6410启动机制
1.上电以后,会先启动片内的iROM中的程序;这部分主要初始化时钟和看门狗一些外围器件。2.第二步把BL1中的程序加载到片内RAM中,希望BL1程序比较小,主要希望去配置主存;3.配置好主存后,再把BL2加载到主存SDRAM中,然后把程序的入口跳到BL2中进行运行;4.BL2就是主要的bootloader,再把OS的镜像加载到SDRAM中,然后去运行操作系统。...原创 2022-06-06 00:07:12 · 131 阅读 · 0 评论