Author:BobZhang Copy Right 2007

Slides:



Advertisements
Similar presentations
高中新课程思想政治(必 修 1 、 2 )的教学体会 北京师大二附中 李文燕 2008 年西城新课程教师培训的讲稿.
Advertisements

《饲料分析与质量检测技术》 说课 主讲教师:管建慧. 课程名称: 《饲料分析与饲料质量检测技术 》 课程编码:
哈工大计算机科学与技术学院软件基础教研室 第二部分 Android 与工程和科研 授课教师:李治军 综合楼 411 室 第 6 讲 进入 Android 内核 Lecture 6: Get Into the Android Kernels.
2009/12/211 商務科技管理系 實 務 專 題 報 告 辦桌非難事 學生: 施雅雯 ( ) 張敬芝 ( ) 葉明臻 ( ) 黃怡琅 ( )
台北市立南港高工 建築科 Architecture 建築科之精神:活力、責任、效率 建築科之展望:共築美麗人生 綜合高中 土木建築學程簡介  綜高土建升學進路  未來出路展望  專業證照考試  未來展望圖例  綜高土建學程課程架構  土建群統一入學測驗考科  升學人數統計.
课前回顾.
成语乐园 成语乐园 执教老师:李道梅.
小规模纳税申报培训 广东省国家税务局 2016年6月.
樓宇及單位要求 遵守建築物條例規定的安全及衛生標準 聘請認可人士提供服務 提交擬議工程的圖則 認可人士/註冊結構工程師名冊
目錄 服務地點 南寮 世光教養院 飛鳳山 長安養老院 尖石國小 內灣 大華停車場 上智國小 二重國中 班級 領隊教師 參與人數 (人次)
詹天佑.
北师大版义务教育课程标准实验教科书 七年级上册讲义 第17课 先进的科学技术.
門神 在傳統觀念中,門是居住環境中與外界相通的出入口,具有重要的屏障作用。門神顧名思義就是護宅守門的神仙,每逢過年,上至天子百官下至普通百姓,家家戶戶必在門上張貼門神,以保一家平安。 門神種類主要有宅第大門上將軍武門神、內室門戶上祈福文門神,還有童子門神、仙子門神等,形象豐富多樣,皇家貴戚還往往在畫上瀝粉貼金,十分吉祥喜慶。
4.3 分页式存储管理 分页式存储管理的基本原理 相联存储器和快表 分页式存储空间的分配和去配
ZXR10交换机基本操作与配置 电信学院通信教研室.
立體四子棋 研究成員:謝旻諺、 鄭家鈞 指導老師:林屏森老師.
“三步式”网络学习法 《探究与发现》数学网络学习平台介绍
我的未来不是梦 参赛者——陈艳祥.
初中思想品德 规范的教学设计与案例分析.
香港普通話研習社科技創意小學 周順強老師.
三創產業學程 學群主持人:袁國榮召集人.
基于Android的开源平板电脑 (FSPAD723)系统构成分析
基于ARM和linux的开发 华中科技大学 武汉创维特 2017/3/20.
计算机常见故障及排除方法 刘广君 2013年8月 励志图强 求实奋进.
William Stallings 计算机组成与结构(第8版)
第二章 计算机信息处理技术 数据是指能够由计算机处理的数字、字符和符号等。 数值数据:用数字符号表示,如1,2,….
提升课堂质量 助推教师成长 促进教学改革 “一师一优课,一课一名师”活动总结 河南省实验小学.
股市不傳之秘 甘氏矩陣圖/價格推算 簡介、基礎學習步驟 1、學習觀念 2、基礎看圖法 A.大數推算 B.基礎角度線推算.
Linux操作系统分析 课程安排 孟宁 电话:
《体育与健康》说课稿 课题:新兴体育舞蹈 —踢踏舞教学 北师大泉州附中 陈玉慈.
© 2000 Wind River Systems, Inc.
第5课 计算机中数的表示 计算机中数的表示 信息技术 七年级(上).
内核移植实例.
單向鏈結串列 Singly Linked Lists.
第一章 C语言概述.
佇列 (Queue).
配置编译内核.
Bootloader技术分析.
讲议: PXE 介绍及实现 Jarvis
第14章 Bootloader基本概念與燒錄.
第三章 系统的启动和初始化 (include lab1)
CH.8 硬體管理.
在專用的嵌入式板子運行 GNU/Linux 系統已經變得越來越流行。一個嵌入式 Linux 系統從軟體的角度看通常可以分為四個層次:
u-boot环境变量和常用命令 广州创龙电子科技有限公司
操作系统实验 lab1-系统引导
多媒體概論報告-BMP 組員名稱: 盧彥良-資料蒐集 周誠哲-資料蒐集
嵌入式系统的Boot Loader技术 陈文智 浙江大学计算机学院 2009年5月.
實驗目的 明瞭可靠傳輸層的基礎觀念 TCP協定下區段資料傳送的格式
第七讲 网际协议IP.
Ch9 Communicating with Hardware
内核移植基础.
(第2版).
凌宁 系统工程师 亚洲区嵌入式系统事业群 微软(中国)有限公司
第3章 認識處理元.
组员:吴迪&王柳杨&金虎&陈武荣&谭金柏
Linux Debugging ls,ps,top,etc. printk() /proc i386提供的调试机制(断点,信号,单步执行)
第13章 计算机的保养.
(第2版).
8051單晶片 蘇恆生 老師.
嵌入式Linux开发流程 成都研究所操作系统团队.
Speaker : Chang Kai-Jia Date : 2010/04/26
猜數字遊戲.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
中国农业科学院博士后学术论坛 博士后基金申请的经验及体会 中国农业科学院生物技术研究所 秦 华 博士
2017 Operating Systems 作業系統實習 助教:陳主恩、林欣穎 實驗室:720A Lab7.
第二章ADS1.2开发环境创建与简介.
作業一: 安裝Linux於btrfs上 中正大學 作業系統實驗室 指導教授:羅習五
XXXX智慧校园设计方案 ——XXXX信息科技有限公司 XX年XX月.
指數、對數函數 數101乙 周文翔 朱哲明 張良聿.
李商隐诗两首 锦 瑟 马 嵬 夕阳无限好,只是尽黄昏。.
Presentation transcript:

Author:BobZhang Copy Right 2007 bob_zhang2004@163.com Agenda U-boot 的功能简要介绍 U-boot与kernel的关系 U-boot的地址与kernel的一些地址是如何定义的? 简要分析一下bootm 2019/4/5 Author:BobZhang Copy Right 2007 bob_zhang2004@163.com

Author:BobZhang Copy Right 2007 bob_zhang2004@163.com U-boot 功能介绍 U-boot 就是为加载kernel而服务的 简单来讲:u-boot 启动过程分为两个部分 :Stage 1 and Stage2 Stage1 主要是初始化硬件设备, 然后最主要的功能就是把Stage2 load到RAM中去。 2019/4/5 Author:BobZhang Copy Right 2007 bob_zhang2004@163.com

Author:BobZhang Copy Right 2007 bob_zhang2004@163.com U-boot 与kernel的关系 U-boot为kernel服务, u-boot为kernel提供一些kernel无法知道的信息,比如ramdisk在RAM中的地址 Kernel也必须为U-boot提供必要的信息:通过mkimage这个tool可以给zImage添加一个header: typedef struct image_header { uint32_t ih_magic; /* Image Header Magic Number */ uint32_t ih_hcrc; /* Image Header CRC Checksum */ uint32_t ih_time; /* Image Creation Timestamp */ uint32_t ih_size; /* Image Data Size */ uint32_t ih_load; /* Data Load Address */ uint32_t ih_ep; /* Entry Point Address */ uint32_t ih_dcrc; /* Image Data CRC Checksum */ uint8_t ih_os; /* Operating System */ uint8_t ih_arch; /* CPU architecture */ uint8_t ih_type; /* Image Type */ uint8_t ih_comp; /* Compression Type */ uint8_t ih_name[IH_NMLEN]; /* Image Name */ } image_header_t; 2019/4/5 Author:BobZhang Copy Right 2007 bob_zhang2004@163.com

Author:BobZhang Copy Right 2007 bob_zhang2004@163.com 此header是如何生成的? 利用u-boot里面的mkimage工具来生成uImage (u-boot源码包/tools/mkimage.c ) 用法: -A arm     -------- 架构是arm -O linux    -------- 操作系统是linux -T kernel  -------- 类型是kernel -C none    -------- 压缩类型为无压缩 -a 30008000 ---- image的载入地址(hex) -e 30008040 ---- 内核的入口地址(hex),因为信息头的大小是0x40 -n linux-2.6.18.8 --- image的名字 -d zImage             ---- 无头信息的image文件名 uImage2.6. 18.8    ---- 加了头信息之后的image文件名 2019/4/5 Author:BobZhang Copy Right 2007 bob_zhang2004@163.com

Author:BobZhang Copy Right 2007 bob_zhang2004@163.com 生成uImage 的方法 mkimage -A arm -O linux -T kernel -C none -a 30008000 -e 30008000 -n linux-2.6.18.8 -d zImage uImage2.6.18.8 注释:这里的意思就是把zImage的前面加上一个0x40长度的header ,没有压缩(none) , kernel的load地址是:-a 30008000 ; kernel的入口地址是 –e 30008000 不知道是否对入口地址有疑问:为什么入口地址不是 0x80003040 呢? 答案就在 u-boot 里面的bootm命令的实现代码上, 我会在 “分析bootm源码”中给予分析介绍 , 来详细分析 1> mkimage 如何指定入口参数 ( -e 0xxxxxx) 2> mkimage 指定了入口参数后, 你用tftpboot 下载kernel到哪个地址? 2019/4/5 Author:BobZhang Copy Right 2007 bob_zhang2004@163.com

Author:BobZhang Copy Right 2007 bob_zhang2004@163.com Mkimage 的执行结果 #/usr/local/src/u-boot-1.2.0/tools/mkimage -A arm -O linux-T kernel -C none -a 30008000 -e 30008000 -n linux-2.6.18.8 -d zImage uImage2.6.18.8 imagefile = uImage2.6.18.8 Image Name: linux-2.6.18.8 Created: Fri Jun 15 13:56:06 2007 Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 1068212 Bytes = 1043.18 kB = 1.02 MB Load Address: 0x30008000 Entry Point: 0x30008000 2019/4/5 Author:BobZhang Copy Right 2007 bob_zhang2004@163.com

Author:BobZhang Copy Right 2007 bob_zhang2004@163.com 准备工作:快速数制转换 为了方便后面的图的计算,先熟练换算: 0x0000,0100 256 Byte 0x0000,1000 4K 0x0001,0000 64K 0x0010,0000 1M 0x0100,0000 16M 0x1000,0000 256M 0x8000 就是 8(十进制) X 0x1000 = 32K 0x400000 = 4M 2019/4/5 Author:BobZhang Copy Right 2007 bob_zhang2004@163.com

Author:BobZhang Copy Right 2007 bob_zhang2004@163.com 30000000 - 34000000) 这些地址是怎么得来呢? 哪些是固定呢? 哪些是自己计算得来得呢? 哪些是比较灵活得呢? 2019/4/5 Author:BobZhang Copy Right 2007 bob_zhang2004@163.com

Author:BobZhang Copy Right 2007 bob_zhang2004@163.com 结论: 生成uImage的方法: 利用mkimage 命令 把zImage 包装 , mkimage -A arm -O linux -T kernel -C none -a 30008000 -e 30008000 -n linux-2.6.18.8 -d zImage uImage2.6.18.8 下面的总结都是 稍微调整一下上面的 -a -e -x 参数什么的, 你会发现 这些参数不同, 就会导致你 tftp dowload的地址会有不同, 有的时候kernel会run不起来。 2019/4/5 Author:BobZhang Copy Right 2007 bob_zhang2004@163.com

Author:BobZhang Copy Right 2007 bob_zhang2004@163.com addr是地址 , 如果两个地方都是addr ,说明是同一个地址, 否则 我会比如addr+0x40 的 1> mkimage -a addr -e addr 那么tftp 下载kernel 就一定不能下载 addr处 , 否则,kernelrun不起来。 因为u-boot并不搬运kernel 代码, 也就是没有把header去掉。 所以 只有入口是 addr+0x40才是kernel的入口。 当然也不能下到 < addr + 2M 的地方, 否则搬运的时候会有一些覆盖, 导致搬运后的kernel不完整, bootm的时候,u-boot就会RESET 的。 2019/4/5 Author:BobZhang Copy Right 2007 bob_zhang2004@163.com

Author:BobZhang Copy Right 2007 bob_zhang2004@163.com 2> mkimage -a addr -e addr+0x40 或者 mkimage -a addr -x 两个是一回事 。 -x的意思 是就在kernel所在地执行。 不必搬运(代码里面的条件是 tftp 下kernel的时候 就下到 addr处,这样bootm就没有必要搬运了) 这种情况: tftp 就一定把kernel 下载到addr处 ,这样u-boot 在bootm的时候 就不搬运了。 其实这种情况更多的用在flash里面 。 // ----------------------------------------------------- switch (hdr->ih_comp) { case IH_COMP_NONE: // -C none if(ntohl(hdr->ih_load) == addr) { //不搬运 printf (“ XIP %s ... ”, name);//注意屏幕信息 } else { memmove ((void *) ntohl(hdr->ih_load), (uchar *)data, len); //搬运:这里data指向实际的kernel ,把kernel搬运到hdr->ih_load处,这个值就是mkimage –d 0x30008000 } 2019/4/5 Author:BobZhang Copy Right 2007 bob_zhang2004@163.com

Bootm 命令源码分析 (源码就是最好的文档) 对于u-boot最常用得命令莫过于: Tftpboot 和 bootm 命令了。 具体分析一下这两个过程, 这样大家用的时候就知其所以然了,也就能少犯一些错误了。 具体参考:common/cmd_bootm.c  do_bootm() 还有do_bootm_linux() 函数 比如 : Tftpboot 0x3300,0000 uImage Tftpboot 0x3080,0000 ramdisk.gz Bootm 0x3300,0000 0x3080,0000 2019/4/5 Author:BobZhang Copy Right 2007 bob_zhang2004@163.com

Author:BobZhang Copy Right 2007 bob_zhang2004@163.com 过程:tftpboot把uImage 下载地址0x33000000 ,然后把ramdisk.gz 下载到0x30800000 . 最后执行bootm , Bootm 会首先取出uImage的0x40个header ,然后读取header的ih_load字段, 只有这样u-boot 才知道把uImage搬运到哪里。 在中间的时候, u-boot 会判断tftp 下载kernel的地址是否等于ih_load ,这里非常关键。如果等于就不搬运 ; 如果不等于u-boot 把指针定位到0x40之后的位置, 这里才是真正的kernel(zImage) , 把zImage 搬运(copy)到 ih_load这个地址上去。 然后执行kernel 。 2019/4/5 Author:BobZhang Copy Right 2007 bob_zhang2004@163.com

Author:BobZhang Copy Right 2007 bob_zhang2004@163.com 简单的梳理一下bootm的代码 用sourceInsight简单的浏览一下关键的几个环节 。 。。。。。。。。。。。 2019/4/5 Author:BobZhang Copy Right 2007 bob_zhang2004@163.com

Author:BobZhang Copy Right 2007 bob_zhang2004@163.com 讨论时间 2019/4/5 Author:BobZhang Copy Right 2007 bob_zhang2004@163.com

Author:BobZhang Copy Right 2007 bob_zhang2004@163.com Thanks a lot ! 2019/4/5 Author:BobZhang Copy Right 2007 bob_zhang2004@163.com