DM3730 x-loader 分析 一

时间:2022-06-26 22:44:27

x-loader采用广州英码DM3730开发板 \x-loader\board\omap3stalker.c

先把这几个宏定义弄明白,在以后的代码中多次用到

DM3730 x-loader 分析 一

DM3730 x-loader 分析 一 

#define __raw_readl(a) (*(volatile unsigned int *)(a))          /*读出寄存器里值*/

#define __raw_writel(v, a) (*(volatile unsigned int *)(a) = (v))  /*把a写入v这个地址*/

#define __raw_readw(a) (*(volatile unsigned short *)(a))

#define __raw_writew(v, a) (*(volatile unsigned short *)(a) = (v))


DM3730 x-loader 分析 一

以上面这个为例展开宏

mode = __raw_readl(CONTROL_STATUS) & (DEVICE_MASK);

           = __raw_readl(OMAP34XX_CTRL_BASE + 0x2F0) & (DEVICE_MASK);

           =__raw_readl(OMAP34XX_L4_IO_BASE+0x2000 + 0x2F0) & (DEVICE_MASK);

          =__raw_readl(0x48000000+0x2000 + 0x2F0) & (DEVICE_MASK);

          =__raw_readl(0x480022F0) & (BIT8|BIT9|BIT10);

          =__raw_readl(0x480022F0) & (1<<8|1<<9|1<<10);

          =(*(volatile unsigned int *)(0x480022F0)) & (000001110000000);/*取出0x480022F0地址中的值,&0b000001110000000,相当于到第8,9,10位的值不变,其它清0*/

return mode >>= 8 /*把上面得到的mode右移8位,得到低3位的值*/

0x480022F0 地址对应ds中  CONTROL_STATUS 寄存器 在2587页,可以看到8 9 10位是设备类型

         

DM3730 x-loader 分析 一

DM3730 x-loader 分析 一

这个函数也是类似上面的宏展开后

mode=(*(volatile unsigned int *)(0x480022F0)) & (000000000001111);/*取出0x480022F0地址中的值,&0b000000000001111,相当于到第低4位的值不变,其它清0,第0-4位正好对应SYSBOOT*/

下面代码(129-170)判断mode值,确定系统启动顺序。

DM3730 x-loader 分析 一

以下代码(171-344)基本都是用同样方法,取出相应寄存器里的值判断cpu 类型,cpu ID,cpu系列型号,cpu版本信息,打印出cpu相关信息

DM3730 x-loader 分析 一

对应英码开发板启动信息,可以看到OMAP36XX/37XX-GP ES2.1

DM3730 x-loader 分析 一