博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
__vet_atags
阅读量:2442 次
发布时间:2019-05-10

本文共 2070 字,大约阅读时间需要 6 分钟。

/arch/arm/include/uapi/asm/setup.h

struct tag {	struct tag_header hdr;	union {		struct tag_core		core;		struct tag_mem32	mem;		struct tag_videotext	videotext;		struct tag_ramdisk	ramdisk;		struct tag_initrd	initrd;		struct tag_serialnr	serialnr;		struct tag_revision	revision;		struct tag_videolfb	videolfb;		struct tag_cmdline	cmdline;		/*		 * Acorn specific		 */		struct tag_acorn	acorn;		/*		 * DC21285 specific		 */		struct tag_memclk	memclk;	} u;};

内核参数通过一个静态的tag链表在启动的时候传递到内核。每个tag的结构为

     +-----------+

     tag_header

     +-----------+

     tag_xxx

     +-----------+

    其中tag_header为tag头,表明tag_xxx的类型和大小,之所以要标识tag_xxx的类型是因为不同的tag需要不同的处理函数。tag_header的结构为

    struct tag_header

    {

     int size;

     int tag;

    }

    size表示tag的结构大小,tag为表示tag类型的常量。这个静态的链表必须以tag_header.tag = ATAG_CORE开始,并以tag_header.tag = ATAG_NONE结束。

    这里的 ATAG_CORE,ATAG_NONE是各个参数的标记,本身是一个32位值,例如:ATAG_CORE=0x54410001。其它的参数标记还包括: ATAG_MEM32 , ATAG_INITRD , ATAG_RAMDISK ,ATAG_COMDLINE 等。每个参数标记就代表一个参数结构体,由各个参数结构体构成了参数链表。

__HEAD/* Determine validity of the r2 atags pointer.  The heuristic requires * that the pointer be aligned, in the first 16k of physical RAM and * that the ATAG_CORE marker is first and present.  If CONFIG_OF_FLATTREE * is selected, then it will also accept a dtb pointer.  Future revisions * of this function may be more lenient with the physical address and * may also be able to move the ATAGS block if necessary. * * Returns: *  r2 either valid atags pointer, valid dtb pointer, or zero *  r5, r6 corrupted */__vet_atags:	tst	r2, #0x3	     @ aligned?是否4bytes对齐?	bne	1f            @ 不是就不合法	ldr	r5, [r2, #0]  @ 取得第一个atags结构的size#ifdef CONFIG_OF_FLATTREE	ldr	r6, =OF_DT_MAGIC		@ is it a DTB?	cmp	r5, r6	beq	2f#endif	cmp	r5, #ATAG_CORE_SIZE		@ is first tag ATAG_CORE?,#define ATAG_CORE_SIZE ((2*4 + 3*4) >> 2)	cmpne	r5, #ATAG_CORE_SIZE_EMPTY @ #define ATAG_CORE_SIZE_EMPTY ((2*4) >> 2)	bne	1f				@ size不是5(*4bytes),也不是2(*4bytes),不合法	ldr	r5, [r2, #4]			@ 取得tag	ldr	r6, =ATAG_CORE        	cmp	r5, r6				@ 比较tag	bne	1f				@ 不是ATAG_CORE就不合法	2:	mov	pc, lr				@ atag/dtb pointer is ok1:	mov	r2, #0	mov	pc, lrENDPROC(__vet_atags)

转载地址:http://rdsqb.baihongyu.com/

你可能感兴趣的文章
手动启用调度_如何手动或自动启用Apple TV的暗模式
查看>>
mac 不受信任在哪里更改_什么是受信任的,为什么它可以在Mac上运行?
查看>>
如何监视应用程序做了什么_如何阻止三星的应用程序权限监视器显示通知
查看>>
pixel2pixel_如何在Pixel 2上启用或禁用“正在播放”
查看>>
应用程序字体变小_什么是电子应用程序,为什么它们变得如此普遍?
查看>>
iphone启用证书_如何在iPhone上启用紧急SOS服务
查看>>
谷歌浏览器获取max地址_Google Home,Mini和Max之间有什么区别?
查看>>
您的Mac正在High Sierra中跟踪您的位置,这就是原因(以及如何禁用它)
查看>>
谷歌 smarthome_如何在Google Home中升级您的Smarthome连接
查看>>
如何使用iPhone和iOS 11轻松共享您的Wi-Fi密码
查看>>
如何在您的Nintendo帐户上启用两因素身份验证
查看>>
忘记word文档打开密码_如何向Word文档添加打开密码
查看>>
虚拟机许可证_您可以将Windows 7许可证转移到在同一台计算机上运行的虚拟机吗?
查看>>
csdn文档裁剪_如何删除Microsoft Office文档中裁剪的屏幕截图中未使用的部分?
查看>>
mac地址唯一性_MAC地址的唯一性如何实施?
查看>>
ios表格添加底纹_如何在Word中的表格单元格中添加底纹
查看>>
如何修复Windows和Linux在双启动时显示不同的时间
查看>>
qt grab() 截图_如何在OS X中使用Grab实用程序获取高级屏幕截图
查看>>
连上wi-fi显示无法连接_由于先前的密码而无法连接到Wi-Fi网络时,该怎么办?
查看>>
应用每次打开重新启动_重新启动PC后如何阻止Windows 10重新打开以前的应用程序
查看>>