U-Boot从dtb获取内存布局并传递到内核

1. U-Boot获取布局内存 U-Boot在启动过程中,默认内存布局通常在.config中定义。 1CONFIG_SYS_SDRAM_BASE=0x240000000 2CONFIG_SYS_DDR_SIZE=0xC0000000 在DDR控制器初始化完成之后,就要确定系统中有多少可用内存,这通常是由dram_init_banksize来实现的,而不同的板级文件会实现不同的dram_init_banksize,这也就决定了不同的板级可以定义不同的获取内存布局的方法。这里介绍一种从dtb中获取内存布局的实现,这可以通过简单的调用fdtdec_setup_memory_banksize来实现。而在使能...

Linux内核数据结构kobject/kset/ktype

1. 数据结构简介 内核版本:linux-6.1 内核文档:Everything you never wanted to know about kobjects, ksets, and ktypes — The Linux Kernel documentation 在Linux内核中,kobject、kset和kobj_type是用于管理和表示kobject的数据结构。kobject是设备驱动模型的基石,sysfs和uevent也与kobject密切相关。 1.1. kobject struct kobject表示一个对象,包含了一些基本属性,通常会内嵌在其他结构体中来表示不同的实例。每个kobject都会在sysfs中呈现出一个...

U-Boot杂项记录

1. get_ram_size get_ram_size只适用于CONFIG_SYS_DDR_SIZE=2^n。 1int dram_init(void) 2{ 3 gd->ram_size = get_ram_size((long *)CONFIG_SYS_SDRAM_BASE, 4 CONFIG_SYS_DDR_SIZE); 5 return 0; 6} 2. 多核启动之spintable U-Boo中需要开启ARMV8_MULTIENTRY,另外CPU_RELEASE_ADDR的值要与内核dtb的cpu-release-addr保持一致。 1#define CPU_RELEASE_ADDR 0x100000 3. FIT...

Exynos4412自制BL1

1. 自制BL1 参考Android_Exynos4412_iROM_Secure_Booting_Guide_Ver.1.00.00.pdf,Exynos4412会自动把BL加载到0x0202_1400运行。所以BL1的入口地址需要设置为0x0202_1400,这样才能保证位置相关码可以正常执行。 Exynos4412内部的BL0会对BL1进行校验,BL1的头部为16字节的校验码,这个校验码是根据头部之后,其余的(8k-16)字节的数据计算出来的,工具源码可以参考mkbl1。对于编译生成的文件不足8k的情况,要将其用0填充到8k。当然,这里是以非安全启动方式来说明的。 编写源码时,要在对面中预留16字节的占位符,比如:...

Exynos4412自制BL2

1. 自制BL2 在官方提供的BL1或自制的BL1基础上,可以自制BL2。如果是使用U-Boot,编译时生成u-booot-spl.bin也是制作BL2的原材料。 如果是自制的BL1,BL2可以根据BL1随心定制。如果是在官方提供的BL1基础上进行开发,BL2要求为16k,其中最后2k使用0填充。可执行文件的大下不能超过(14k-4)字节,其中14k的最后4个字节是存储校验值的。相较于BL1的校验值,BL2的校验简单的多,只是把前(14k-4)的内容按字节进行累加即可。 这样生成的BL2在Exynos4412和Exynos 4412 Prime上是都可以使用的。当然,这里要求是非安全启动方式。 1.1. mkbl2源码 网上有C语...