当前位置: 首页 > news >正文

建网站做相亲广告推广方式

建网站做相亲,广告推广方式,您提供的产品已经提交过网站备案,无锡网络公司平台在嵌入式系统中#xff0c;BootLoader 是用来初始化硬件#xff0c;加载内核#xff0c;传递参数。因为嵌入式系统的硬件环境各不相同#xff0c;所以嵌入式系统的BootLoader 也各不相同#xff0c;其中比较通用的是U-Boot#xff0c;它支持不同的体系结构#xff0c;如…在嵌入式系统中BootLoader 是用来初始化硬件加载内核传递参数。因为嵌入式系统的硬件环境各不相同所以嵌入式系统的BootLoader 也各不相同其中比较通用的是U-Boot它支持不同的体系结构如ARMPowerPCX86MIPS 等。本文着重介BootLoader与内核之间参数传递这一基本功能。本文的硬件平台是基于AT91RM9200 处理器系统软件平台是Linux-2.6.19.2 内核。内核映像文件为zImage。1. 系统硬件平台简介AT91RM9200 处理器它是由Atmel 公司基于ARM920T 内核的微处理器带有内存管理单元CPU 时钟最高可达240MHz,它具有丰富的标准接口EBI 接口内部集成了静态存储控制器SMCSDRAM 控制器Burst Flash 控制器。有关处理器的说明请参考AT91RM9200 的数据手册。本系统SDRAM64MB地址为0x20000000, NorFlash8MB的地址为0x10000000[1]。2. BootLoader 设计和实现内核源代码目录树下的documentation/arm/booting[2]文档规定了基于ARM 体系结构BootLoader 的基本功能。本系统BootLoader 除了完成这些基本的功能外还结合自身硬件的特点加入了代码搬运等功能。BootLoader 的流程是系统上电复位后首先从NorFlash 开始运行由处理器BMS 引脚连接决定因为处理器此时的0 地址就是NorFlash 的首地址(0x10000000)BootLoader就是被烧写在这个位置AT91RM9200 处理器能够映射的地址范围只有0x00000000—0x001f ffff。 BootLoader 执行的第一步就是将自身代码从NorFlash 中搬运到处理器内部的RAM 中0x00200000然后将0 地址映射到内部RAM,并且跳转到内部RAM 的相应地址处继续执行。进入内部RAM 后才进入真正的硬件初始化阶段这个阶段初始化的各种控制器都是内核所必须的包括PMC, EBI, SMC, SDRAM, USART 等。接着就是创建内核参数链表(Tagged list)创建完链表就是搬运事先烧写在NorFlash 中的内核映像和根文件系统映像到SDRAM根据内核对BootLoader 的基本要求关闭中断MMU 和数据Cache并且配置r00, r10x0000 00fb 或者0x00000106(根据内核中linux/arch/arm/tools/mach-types[2]规定的机器编号)r20x20000100BootLoader 传递给内核参数链表的物理地址在ARM体系结构中这个地址在同一种处理器的机器描述符machine_desc中都是默认的所以在这里可以不指定。最后BootLoader 直接跳转到SDRAM 的内核处执行。3. 内核参数链表BootLoader 可以通过两种方法传递参数给内核 一种是旧的参数结构方式parameter_struct)主要是2.6 之前的内核使用的方式。另外一种就是现在的2.6 内核在用的参数链表 (tagged list) 方式。这些参数主要包括系统的根设备标志页面大小内存的起始地址和大小RAMDISK 的起始地址和大小压缩的RAMDISK 根文件系统的起始地址和大小内核命令参数等[3][4][5]。内核参数链表的格式和说明可以从内核源代码目录树中的 include/asm-arm/setup.h[2]中找到参数链表必须以ATAG_CORE 开始以ATAG_NONE 结束。这里的ATAG_COREATAG_NONE 是各个参数的标记本身是一个32 位值例如ATAG_CORE0x54410001。其它的参数标记还包括 ATAG_MEM32 ATAG_INITRD ATAG_RAMDISK ATAG_COMDLINE 等。每个参数标记就代表一个参数结构体由各个参数结构体构成了参数链表。参数结构体的定义如下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;struct tag_acorn acorn;struct tag_memclk memclk;} u;};参数结构体包括两个部分一个是 tag_header 结构体,一个是u 联合体。tag_header 结构体的定义如下struct tag_header {u32 size;u32 tag;};其中 size表示整个tag 结构体的大小(用字的个数来表示而不是字节的个数)等于tag_header 的大小加上u 联合体的大小例如参数结构体ATAG_CORE 的size(sizeof(tag-tag_header)sizeof(tag-u.core))2一般通过函数tag_size(struct * tag_xxx)来获得每个参数结构体的size。其中tag表示整个tag 结构体的标记如ATAG_CORE等。联合体u 包括了所有可选择的内核参数类型包括tag_core, tag_mem32tag_ramdisk等。参数结构体之间的遍历是通过函数tag_next(struct * tag)来实现的。本系统参数链表包括的结构体有 ATAG_CORE ATAG_MEM ATAG_RAMDISK ATAG_INITRD32 ATAG_CMDLINEATAG_END。在整个参数链表中除了参数结构体ATAG_CORE 和ATAG_END 的位置固定以外其他参数结构体的顺序是任意的。本BootLoader 所传递的参数链表如下第一个内核参数结构体标记为ATAG_CORE参数类型为tag_core。每个参数类型的定义请参考源代码文件。tag_array 初始化为指向参数链表的第一个结构体的指针。tag_array-hdr.tagATAG_CORE;tag_array-hdr.sizetag_size(tag_core);tag_array-u.core.flags1;tag_array-u.core.pagesize4096;tag_array-u.core.rootdev0x00100000;tag_arraytag_next(tag_array);tag_array-hdr.tagATAG_MEM;tag_array-hdr.sizetag_size(tag_mem32);tag_array-u.mem.size0x04000000;tag_array-u.mem.start0x20000000;tag_arraytag_next(tag_array);……tag_array-hdr.tagATAG_NONE;tag_array-hdr.size0;tag_arraytag_next(tag_array);最后将内核参数链表复制到内核默认的物理地址0x20000100 处。这样参数链表就建好了。4. 内核接收参数下面从基于ARM体系结构的zImage 映像启动来分析Linux 内核是怎样接收BootLoader传递过来的内核参数zImage 启动过程如下图所示。(图有时间再画)在文件 arch/arm/boot/compressed/head.S[2]中 start 为zImage 的起始点部分代码如下start:mov r7, r1mov r8, r2…...mov r0, r4mov r3, r7bl decompress_kernelb call_kernelcall_kernel……mov r0, #0mov r1, r7mov r2, r8mov pc, r4首先将BootLoader 传递过来的r1机器编号、r2参数链表的物理地址的值保存到r7、r8 中再将r7 作为参数传递给解压函数decompress_kernel。在解压函数中再将r7 传递给全局变量__machine_arch_type。在跳到内核vmlinux入口之前再将r7r8 还原到r1r2 中。在文件 arch/arm/kernel/head.S[2]中内核vmlinux入口的部分代码如下stextmrc p15, 0, r9, c0, c0bl __lookup_processor_type………bl __lookup_machine_type首先从处理器内部特殊寄存器CP15中获得ARM 内核的类型从处理器内核描述符proc_info_list表__proc_info_begin—__proc_info_end中查询有无此ARM 内核的类型如果无就出错退出。处理器内核描述符定义在 include/asm-arm/procinfo.h[2]中具体的函数实现在 arch/arm/mm/proc-xxx.S[2]中在编译连接过程中将各种处理器内核描述符组合成表。接着从机器描述符machine_desc表__mach_info_begin—__mach_info_end中查询有无r1 寄存器指定的机器编号如果没有就出错退出。机器编号mach_type_xxx 在arch/arm/tools/mach-types[2]文件中说明每个机器描述符中包括一个唯一的机器编号机器描述符的定义在 include/asm-arm/mach/arch.h[2]中具体实现在 arch/arm/mach-xxxx[2]文件夹中在编译连接过程中将基于同一种处理器的不同机器描述符组合成表。例如基于AT91RM9200 处理器的各种机器描述符可以参考 arch/arm/mach-at91rm9200/board-xxx.c[2]机器编号为262 的机器描述符如下所示MACHINE_START(AT91RM9200DK, Atmel AT91RM9200-DK)/* Maintainer: SAN People/Atmel */.phys_io AT91_BASE_SYS,.io_pg_offst (AT91_VA_BASE_SYS 18) 0xfffc,.boot_params AT91_SDRAM_BASE 0x100,.timer at91rm9200_timer,.map_io dk_map_io,.init_irq dk_init_irq,.init_machine dk_board_init,MACHINE_END最后就是打开MMU并跳转到 init/main.c[2]的start_kernel初始化系统。在 init/main.c[2] 中函数start_kernel的部分代码如下{ ……setup_arch……}在 arch/arm/kernel/setup.c[2]中函数setup_arch的部分代码如下{ ……setup_processor();mdescsetup_machine(machine_arch_type);……parse_tags(tags);……}setup_processor函数从处理器内核描述符表中找到匹配的描述符并初始化一些处理器变量。setup_machine用机器编号在解压函数decompress_kernel 中被赋值作为参数返回机器描述符。从机器描述符中获得内核参数的物理地址赋值给tags 变量。然后调用parse_tags函数分析内核参数链表把各个参数值传递给全局变量。这样内核就收到了BootLoader 传递的参数。5. 参数传递的验证和测试参数传递的结果可以通过内核启动的打印信息来验证。Machine: Atmel AT91RM9200-DK……Kernel command line: consolettyS0,115200 root/dev/ram rw init/linuxrc……Memory: 64MB 64MB total……checking if image is initramfs...it isnt (no cpio magic); looks like an initrdFreeing initrd memory: 1024K……RAMDISK: Compressed image found at block 0一个完备的BootLoader 是一个很复杂的工程本文所介绍的只是嵌入式系统的BootLoaer 基本功能。任何一个BootLoader 都离不开这个基本功能内核只有接收这些参数才能正确地启动,同时也为内核的移植和调试奠定了良好的基础。
http://www.zqtcl.cn/news/96289/

相关文章:

  • 有哪几个平台做网站专业的网站建设流程
  • 网站的回到顶部怎么做字体艺术设计在线生成
  • 物流营销型网站案例分析渭南专业做网站
  • 织梦音乐网站接推广任务的平台
  • 网站建设设计团队平面设计主要做什么ui
  • 站长工具seo综合查询广告和京东一样的网站
  • 柳州做网站的企业做黑彩网站
  • 商城网站开发那家好网站建设知识平台
  • 莱州网站定制flash网站cms
  • 经营范围里的网站建设直播系统程序
  • 58同城类似的网站开发wordpress 地方生活
  • wordpress 七牛ossseo系统
  • 郑州做网站 熊掌号太原今天最新通知
  • 文章网站如何与压力做足球比赛直播间在线观看
  • 越秀网站建设优化呼和浩特住房和城乡建设部网站
  • 河南省路桥建设集团网站建网站公司郑州
  • 海沧做网站深圳外贸招聘
  • 网站建设置顶多少钱翻译成英文
  • 柳州正规网站制作公司哪家好怎么学好网站建设
  • 德宏做网站网站的设计思路范文
  • 自己的电脑做网站服务器深圳福田有什么好玩的地方
  • 奕腾网站建设上海十大装修公司排名榜单
  • 简述建设一个网站的基本步骤wordpress欢迎新会员
  • 国外医疗网站模板wordpress主题 科技
  • 海淀企业型网站建设wordpress自定义帖子链接
  • 自己的网站怎么优化做网页的
  • dw设计一个简单网站网页微信版文件传输
  • 网站地图怎么做XML宁波网站建设服务提供商
  • 中石化两学一做网站获取网站域名
  • 吉林长春火车站官网湖北葛洲坝建设工程网站