嵌入式系统仿真实验第十讲 从今天开始我们将正式进入到系统软件, 前面我们一致参照的 U-Boot 的结构写的 boot 程序, 今天我们将直接开始使用 U-Boot 了 有关 bootloader 的原理, 我的理论课程讲义里面写的很清楚, 分为两个 stage, 第一个 stage 我们已经介绍过

Similar documents
嵌入式系统原理及应用教程 ( 第 2 版 )/ 清华大学出版社 EL-ARM-860 V1.2 一 实验目的 实验二 Boot Loader 引导程序 1. 了解 Boot Loader 的作用, 掌握 Boot Loader 的编程思想 二 实验设备 1. Pentium II 以上的 PC 机,

Abstract arm linux tool-chain root NET-Start! 2

ARM+Linux嵌入式系统开发路线

Microsoft Word - 在VMWare-5.5+RedHat-9下建立本机QTopia-2.1.1虚拟平台a.doc

Ioncube Php Encoder 8 3 Crack 4. llamaba octobre traslado General Search colony

Microsoft Word - AmlogicLinux_StartGuide_1.doc

Microsoft Word - uboot说明.doc

陕西职业技术学院(用标志)

Microsoft Word - S3c6410移植过程.doc

K9板LINUX移植文档

(Microsoft Word - Uboot\305\344\326\303\272\315\261\340\322\353.doc)

SST SPAC SST SoftICE SST89C5x/SST89x554RC /564RD /SST89x516/5xRD / SoftICE SoftICE MCU SoftICE SS

. Outline 编译 Linux 在 QEMU 模拟器上运行制作带 grub 启动的磁盘映像...1 编译 Linux 在 QEMU 模拟器上运行...2 制作带 grub 启动的磁盘映像

Tel: w w w. f o x i c e. n e t Tel: FoxICE For ARM 仿真器简介 Brief introduction FoxI

Microsoft Word - 武術-定稿.doc

第 十 一 期 2015 年 2 月 关 于 车 辆 购 置 税 征 收 管 理 有 关 问 题 的 公 告 ( 点 击 跳 转 至 全 文 ) 国 家 税 务 总 局 公 告 2015 年 第 4 号 关 于 电 池 涂 料 消 费 税 征 收 管 理 有 关 问 题 的 公 告 ( 点 击 跳

投影片 1

六域链联盟 SDChain-Matrix 节点搭建指南 2018/07/26 Version : 1.0.0

ARM JTAG实时仿真器安装使用指南

Microsoft Word - DM6467系统平台构建.doc

嵌入式系统bootloader开发移植.ppt

BeagleBone Black emmc 烧写全记录 ( 基于 AM335x SDK06) emmc 存储介质目前越来越广泛的应用在嵌入式系统中,AM335x 的用户也越来越多的使用 EMMC 作为系统的主要存储介质 目前 AM335x 的几款官方 demo 板中, 只有 BeagleBone B

Ch03_嵌入式作業系統建置_01

考 試 日 期 :2016/04/24 教 室 名 稱 :602 電 腦 教 室 考 試 時 間 :09: 二 技 企 管 一 胡 宗 兒 中 文 輸 入 四 技 企 四 甲 林 姿 瑄 中 文 輸 入 二 技 企 管 一

ᅧᄉ￑←￈�vivi

ex

PowerPoint 簡報

<4D F736F F D20AC4FBDBDA4FBB67DA96CAABA2DA743A67EAFC5AAA95FA7B9BD5A5F2E646F63>

Linux服务器构建与运维管理

Cygwin Cygwin windows Linux Cygwin.dll Windows Linux API Linux Windows Linux 2


河 南 蓝 皮 书 文 化 (2008) 网 络 文 学 主 要 是 指 在 网 上 原 创 的 文 学 作 品 作 为 网 络 文 化 的 主 力 部 分, 网 络 文 学 的 发 展 在 近 年 来 势 不 可 挡 作 为 凭 借 新 兴 媒 介 兴 起 的 文 学, 网 络 文 学 与 传 统

21 flash

《將進酒》

MarsBoard AM335X 用户手册 微雪电子 WAVESHARE ELECTRONICS MarsBoard AM335X 用户手册 产品概述 MarsBoard AM335X 是基于 TI AM335X 系列处理器的卡片式电脑 工业级别的芯片, 广泛的应用 在工业, 医疗, 消费类电子等行

Microsoft PowerPoint - 第十一讲:Bootloader.ppt

PowerPoint Presentation

DVK530/531扩展板

(Microsoft Word - Uboot\324\264\302\353\267\326\316\366.doc)

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页

Andes Technology PPT Temp

幻灯片 1

关于规范区委、区委办公室发文

Microsoft Word - ??山

Microsoft Word - 助理人員教育訓練-會計室.docx

Outline 1 SkyEye 简介 2 SkyEye 的安装 SkyEye 的安装下载 skyeye 源代码, 编译并安装 3 在 Linux 的根文件系统中添加 hello 在 Linux 的根文件系统中添加 hello 4 命令行安装 skyeye 添加 hello 到 uclinux 的根

linux 2.6内核移植_for at91rm9200_归档.doc

2004 Sun Microsystems, Inc Network Circle, Santa Clara, CA U.S.A. Sun Sun Berkeley BSD University of California UNIX X/Open Company, Ltd.

Outline 制作带 grub 启动的磁盘映像 利用 qemu+gdb 来调试 linux

Microsoft Word - rtlinux安装手册.doc

今天 年春季号 总 92 期

*

( ) / / / / / / /

(Microsoft Word - 8\244T\244\362\277\337\272]\244W\265L\246W.doc)

Microsoft Word - 專家本色 doc


但, 你 应 该 听 过 我 们 走 在 大 路 上 这 首 歌, 或 许 还 知 道 革 命 人 永 远 是 年 轻 那 支 歌 ; 并 且, 几 乎 可 以 肯 定, 你 在 戴 红 领 巾 的 那 阵, 必 然 唱 过 牛 儿 还 在 山 坡 吃 草, 放 牛 的 却 不 知 道 哪 儿 去

2 临 终 助 念 答 问 序 临 终 关 怀, 由 佛 门 净 宗 古 来 祖 师 大 德 提 倡 助 念 往 生, 现 今 已 渐 为 社 会 大 众 所 重 视, 在 台 湾, 台 大 长 庚 等 各 大 医 院, 也 都 设 有 助 念 室 ; 大 陆 上 许 多 道 场, 也 有 专 为

校园之星

Microsoft Word - 澎湖田調報告-宏達組9804.doc

<4D F736F F F696E74202D FA8BEA861B8EAB7BDBEE3A658BB50C0B3A5CE28B773A6CBA5AB29>


之 原 則 及 國 防 部 訂 頒 國 軍 列 管 國 有 不 動 產 提 供 非 軍 方 單 位 使 用 處 理 原 則 規 定 不 符, 仍 應 以 出 租 方 式 辦 理 惟 可 就 偏 遠 地 區 提 供 官 兵 金 融 水 電 服 務 使 用 部 分, 研 議 降 低 租 金 標 準, 報

chineseall

釋禪波羅蜜次第法門

证券代码: 证券简称:锦江股份 公告编号:【】

1700 装 卸 搬 运 7645 装 卸 搬 运 服 务 2100 建 筑 7410 工 程 服 务 11% 装 卸 搬 运 服 务, 是 指 使 用 装 卸 搬 运 工 具 或 者 人 力 畜 力 将 货 物 在 运 输 工 具 之 间 装 卸 现 场 之 间 或 者 运 输 工 具 与 装 卸

前 言 教 育 无 小 事, 它 成 就 着 学 生 的 未 来 作 为 教 师, 他 们 无 时 无 刻 不 在 关 注 着 学 生 的 成 长 学 生 的 未 来 学 生 就 像 一 朵 含 苞 待 放 的 花 朵, 需 要 老 师 们 的 细 心 呵 护, 给 学 生 需 要 的 东 西, 而

《盗墓笔记》 南派三叔/著

平 凡 足 迹 李 本 川 作 者 为 中 国 科 学 院 海 洋 研 究 所 研 究 员,1935 年 生, 山 东 荣 成 人 我 今 年 63 岁 了 大 前 年 丈 夫 和 儿 子 在 一 个 月 内 先 后 离 开 了 人 世, 女 儿 又 已 出 嫁, 现 在 是 孑 然 一 身 我 是

<CFFBB7D1D5DFD0D0CEAAD1A72E6D7073>

独立学院建设与发展


嵌入式Linux知识培训

第 1 页共 9 页 文档履历 版本号日期制 / 修订人内容描述 V 正式版本

UBOOT 的编译命令直接一次性编译 make O=am335x CROSS_COMPILE=arm-arago-linux-gnueabi ARCH=arm am335x_evm 配置 make ARCH=arm CROSS_COMPILE=arm-arago-linux-gnueabi- am3

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

台 中 市 北 屯 區 東 山 里 橫 坑 9 林 志 明 巷 89-5 菜 豆 菜 大 漿 果 菜 豆 菜 大 漿 果 小 漿 果 核 果 柑 桔 無 陳 錦 生 新 竹 市 香 山 區

菩提道次第廣論

路 上 沒 說 話, 車 子 被 爸 離 去 後 開 走 了, 沒 什 麼 變, 除 了 一 股 淡 淡 的 香 味, 我 不 太 習 慣, 像 空 氣 中 的 粉 塵, 左 飄 右 飄, 光 中 飛 舞 我 沒 提, 看 車 窗 外, 外 面 不 太 有 趣, 我 只 是 沒 事 幹, 我 們 本

繁 華 國 小 101 學 年 母 親 節 感 恩 惜 福 - 跳 蚤 市 場 暨 科 學 闖 關 遊 戲 親 子 活 動 實 施 計 畫 一 依 據 : 本 校 101 學 年 度 校 務 計 畫 及 行 事 曆 二 目 的 : 1. 培 養 學 生 感 恩 惜 物 知 福 惜 福 的 節 儉 觀


育儿小故事(四)

Microsoft Word - 正文.doc

Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7.

投影片 1

untitled

MarsBoard AM335X 用户手册 微雪电子 WAVESHARE ELECTRONICS MarsBoard AM335X 用户手册 产品概述 MarsBoard AM335X 是基于 TI AM335X 系列处理器的卡片式电脑 工业级别的芯片, 广泛的应用 在工业, 医疗, 消费类电子等行

Microsoft Word - EASY ARM2200 移植 uClinux.doc

Red Flag Linux Desktop 4.0 Red Flag Linux Desktop 4.0 1

<4D F736F F D20C7B6C8EBCABDCFB5CDB3C9E8BCC6CAA6B0B8C0FDB5BCD1A75FD1F9D5C22E646F63>

第1章、概述

untitled

Microsoft Word - A doc

22 Industry and Information Technology Education CPU 70 10ACM IEEE/CS

中国进出口商品交易会参展展品范围

MYE-SAM9G15/9G25

处理用户输入的命令 这里只简要列出了主要执行的函数流程 : void start_armboot (void) // 全局数据变量指针 gd 占用 r8 DECLARE_GLOBAL_DATA_PTR; /* 给全局数据变量 gd 安排空间 */ gd = (gd_t*)(_armboot_star

《手机维修原理及维修实例详解》目录

Transcription:

嵌入式系统仿真实验第十讲 从今天开始我们将正式进入到系统软件, 前面我们一致参照的 U-Boot 的结构写的 boot 程序, 今天我们将直接开始使用 U-Boot 了 有关 bootloader 的原理, 我的理论课程讲义里面写的很清楚, 分为两个 stage, 第一个 stage 我们已经介绍过, 现在开始第二个 stage, 具体的地方如果不清楚的, 请自行学习理论课程讲义, 这里只是简单再贴一贴我画的第二阶段大致流程图 我们在理论课程里讲过 stage 1 的功能 : RAM 初始化, 设置各个部件的时钟和片选, 将 BootLoader 拷贝到 RAM 中, 设置堆栈, 调用 Stage 2 Boot 入口 设置中断向量表 ResetHandler: 复位入口 切换到超级模式, 并禁止中断 设置中断模式, 关闭所有中断 关闭看门狗 使能回写 Buffer 和 Cache 初始化硬件 设置非 Cache 区域 设置外部中断的触发方式 设置时钟 设置 CPU 的运行频率, 系统各部件的总线矿宽度以及各部件的时钟 初始化一个串口用于调试输出 拷贝代码到 RAM 将 Boot 拷贝到 RAM 跳至 C 代码程序 图 1 Stage 1 流程图 图 1 是我们在第 6 讲就画过的第一阶段的流程, 对应 U-Boot 的具体流程见图 2

文件位置 系统上电 文件位置 全局入口 _start 标号 其他异常入口 异常向量表 relocate 标号 No 进入复位异常? yes _start_armboot 标号 复位异常服务程序入口 reset 标号 start_armboot 函数 lib_arm/board.c cpu_init_crit 标号 main_loop() 函数 common/main.c cpu/arm926ejs/versatile/low_level_init.s low_level_init 标号 进入 U-boot 命令行 后面就是 U- boot 的 C 代码编写的文件管理 网络管理 硬件驱动 加载操作系统等操作 图 2 U-Boot 的流程图 U-Boot 的第二阶段从 start_armboot 算起, 完成硬件初始化, 完成 stage2 的第一步 函数在 lib_arm/board.c, 大致是如下的内容 : void start_armboot (void) { size = flash_init (); display_flash_config (size); for (;;) main_loop (); } 由 start_armboot 进入到 main_loop () 函数, 其流程大致如图 3 所示

开始 由板子的配置文件宏定义情况决定相关变量 获取 bootdelay 环境变量值 获取 bootcmd 环境变量值 bootdelay>=0 且 Bootcmd!=0 且 abortboot() 在 bootdelay 内是否有串口之类输入? N Y run_command(bootcmd,0) len=readline() len=-1 输出 interrupt Len? len=0 flag=1 不执行 len=1 run_command(lastcommand,flag) N 跳出? 结束 Y 图 3 main_loop 函数的大致流程 在我前面的范例中,main_loop 函数只是串口打印了一个菜单, 然后演示了几个接口器件的驱动, 而 U_Boot 则要复杂的多, 我们不可能一一去讲, 这里面主要是 run_command 函数里面实现了很多的 U-Boot 命令函数 比如 do_boot_linux 函数, 就是将 linux 内核拷贝到内存, 然后启动内核, 对应的是 bootm

等命令 其他的一些主要命令请参考 U-Boot 的手册 1U-Boot 下载 编译 调试我们还是直接来做实验, 我选择了 u-boot-2010.09 这个版本的 U-Boot 来做实验, 首先到网上去找源代码压缩包, 哪里方便下载, 你就去哪里下 下完之后, 解压, 后面边做实验边阅读体会代码 tar -jxvf u-boot-2010.09.tar.bz2 cd u-boot-2010.09/ 进入解压目录, 然后指定 CPU 架构类型, 交叉编译器以及板子配置文件 : make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- versatilepb_config 编译 : make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- -s sudo ln -sf $PWD/tools/mkimage /usr/local/bin/mkimage 编译下面那句命令是建立链接文件 mkimage 这个工具, 我们后面需要用到这个工具将二进制执行文件生成 image 映像文件 编译成功后, 源代码解压的目录里会出现几个文件 图 4 编译成功 u-boot.map 地址和符号的映射关系 (System.map) u-boot ELF 格式的可执行文件 ( 这个可以用我们前面讲的方法调试 ) u-boot.bin 二进制文件它就是可以直接烧入 ROM NOR Flash 的文件

u-boot.srec Motorola S-Record 格式的可执行文件生成这些文件后, 接下来我们就可以把这个 U-Boot 烧写到机器人 flash 里面去, 然后我们就可以告别 bare metal programming 了 同样的, 我们可以用 gdb 和 qemu 来仿真调试这个 U-Boot 文件了 先运行一下 u-boot: qemu-system-arm -M versatilepb -nographic -kernel u-boot 图 5 qemu 仿真运行 U-Boot 可以看到 U-Boot 成功运行, 出现提示后, 停留在命令行等待状态 可以测试一下 printenv 之类命令看看配置情况 使用 DDD 和 gdb 我们也是可以调试 U-Boot 代码的 : 1) qemu-system-arm -M versatilepb -m 128M -gdb tcp::1024 -serial stdio -kernel u-boot -S 2) ddd --debugger arm-none-linux-gnueabi-gdb u-boot

图 6 gdb 调试 U-Boot 需要注意的是由于我用的虚拟机,qemu 的窗口总是被 stopped 掉的, 需要我手工在 qemu 的命令窗口 ( 按 ctrl+alt+2 会出现 ) 按 c, 所以我没有使用 -nographic 命令 2 U-Boot 加载自编写程序的仿真 Bootloader 就是 boot+loader, 目前我们还没有 loader 一个操作系统, 目前操作系统我们还没有讲到, 那我们能不能体会一下 bootloader 是如何加载系统的呢? 接下来我们来尝试做一个实验 前面我们一致都是认为自己是做了很多编程的, 特别是到了 ex14 的实验, 一步一步已经小有规模了, 这个程序能不能当系统程序用呢? 我们说这应该是完全可以的 我们可以将 U-Boot 作为我们的系统版的 BIOS 程序, 然后如果我们并没有多线程 多任务的环境需求, 而仅仅只是一个 while 循环轮询程序就可以解决的话, 我们是没有必要非要弄一个操作系统来的 这样的话我们既可以让 U-Boot 来做我们的程序管理 也可以用 U-Boot 来当我们的 flash update 程序完成版本更新 当然, 如果只是为了学习, 有时间我们其实也可以把 ex14 接着往下, 加入时钟 多线程 信号量 上下文切换 任务调度 内存管理等函数一一实现, 自己去写一个操作系统出来 我们知道 U-Boot 有个命令是 bootm 命令是从内存中加载操作系统内核, 现在我们假设 ex14 就是一个操作系统的内核, 我们来用 U-Boot 去加载它运行, 看

可不可以 目前有几种方法去加载这个实验,U-Boot 支持内存文件系统加载 tftp 下载加载 以及 nfs 等方法进行加载, 这一次我们选择用内存加载 首先我们需要理清一下, 如果我们把 U-Boot 和 ex14 的执行文件都放到内存中去仿真, 我们需要将这两个文件连在一起加载才行,linux 里面有最简单的 cat 命令, 将多个文件输入到一个文件中 在 cat 之前, 我们将 ex14 的执行文件 test.bin 生成 image 文件 : mkimage -A arm -C none -O linux -T kernel -d test.bin -a 0x00300000 -e 0x00300000 test.uimg 我们把 test.bin 打算放到内存地址 0x300000 处, 这个主要是考虑到 U-Boot 本身的大小, 以及堆栈开辟情况来决定把 test.bin 文件放到哪里去 接下来把它们俩合并 : cat u-boot.bin test.uimg > flash.bin 生成一个合并了的 flash.bin 二进制执行文件, 这个有点像早期的一些病毒程序, 把自己附在某个执行文件后面, 修改执行文件某条语句, 让用户执行程序同时也把病毒加载到内存中去运行 在仿真运行这个 flash.bin 之前, 我们需要知道 test.uimg 的起始位置是什么, 由于 u-boot 在前, 所以我们使用下面的语句查看一下地址 : printf "0x%X\n" $(expr $(stat -c%s u-boot.bin) + 65536) 图 7 查看 test.bin 的起始地址 我们编译的 u-boot.bin 有 0x25590 个字节 所以, 后面我们启动 u-boot.bin 后, 可以用 bootm 0x25590 命令将 test.bin 加载到 0x300000 处执行

注意在 ex14 里面需要将 map.lds 文件的链接起始地址也改为 0x300000, 同样, Makefile 里面也得改 运行命令 : qemu-system-arm -M versatilepb -serial stdio -semihosting -kernel flash.bin 出现 U-Boot 界面, 见图 8 图 8 仿真 U-Boot 在 U-Boot 里面键入 :iminfo 0x25590 图 9 查看内核文件

可以看到 U-Boot 把我们的 test.bin 看作是 ARM Linux Kernel 的未压缩文件, 2.8M, 加载到内存入口点是 0x300000, 好了, 我们用 bootm 命令加载看看吧 图 10 加载运行我们自己的程序 看到了吧,U-Boot 成功加载了我们前面的程序, 运行出来了我们的菜单以及 界面, 程序所有功能一切正常 OK, 今天的仿真实验暂时就到这里了, 下次再见! 注 : 本实验教程为武汉科技大学机器人与智能系统研究院闵华松老师的网络课程教学文档, 可以复制, 不做商业用途