(第2版).

Slides:



Advertisements
Similar presentations
哈工大计算机科学与技术学院软件基础教研室 第二部分 Android 与工程和科研 授课教师:李治军 综合楼 411 室 第 6 讲 进入 Android 内核 Lecture 6: Get Into the Android Kernels.
Advertisements

课件说明 课题 : 国歌 课型 : 综合 课时 : 一课时 突破口 : 通过不同国家国旗的竞猜游戏, 导入我 国的国旗国歌, 并以器乐和声乐两种不同形式 的作品达到体会歌曲内涵的目的, 从而更好地 演唱歌曲.
计算机基础 与应用案例教程 第一篇 基础理论篇 第4章 计算机软件系统.
嵌入式系统简介 Introduction to Embedded System
Linux 安裝入門與基本管理 課程目標: 學習Linux平台下的安裝設定 與 建置一個基本的Linux伺服器
辅导老师:隋秀峰 2008年10月22日 Lab3:MPI Programming 辅导老师:隋秀峰 2008年10月22日.
计算机网络 指导教师:杨建国 二零一零年三月.
Linux管理与应用 Linux文件系统- 磁盘加载与卸载 主讲教师:张美平
Linux并行计算平台搭建及应用 王彦棡 2010年5月.
第 6 章 安裝問題解疑.
香港普通話研習社科技創意小學 周順強老師.
第1章 Linux概述 马丽洁.
Linux 的檔案管理.
基于Android的开源平板电脑 (FSPAD723)系统构成分析
基于ARM和linux的开发 华中科技大学 武汉创维特 2017/3/20.
嵌入式操作系统 陈天洲、陈文智.
UClinux在3000平台上的移植.
資訊安全與系統管理 2013/3/13 Chien wei lin.
UNIX系統與資料庫安裝 Why UNIX 常用的工具程式介紹 資料庫的安裝.
第16章 編譯與升級Kernel系統核心 課前指引
QtiPlot-實驗室數據分析與繪圖 撰文者: 1.海洋大學光電所 楊善文 2. (如對本文有貢獻者,記得在此留名)
當企鵝龍遇上小飛象 DRBL-Hadoop Jazz Wang Yao-Tsung Wang
第8章 Linux系统管理.
Linux.
嵌入式操作系统 陈香兰 Fall 2009.
Building Embedded Linux 2
第 19 章 檔案系統與 權限設定.
内核移植实例.
台灣大學計算機及資訊網路中心 教學研究組 張傑生
Linux 入門課程(基礎篇) 講者: Pank
Linux 切换、 创建和删除目录 系统管理 宁波市高校慕课联盟课程
配置编译内核.
Bootloader技术分析.
嵌入式系統架構 長高科技 顏旭偉.
第3章 Linux系统的基本操作 3.1 X Window图形化用户界面 3.2 GNOME的桌面环境 3.3 窗口和菜单操作
Ubuntu Server Installation
第14章 Bootloader基本概念與燒錄.
Block diagram BB —逻辑 —音频 —电源管理 HW interface. Block diagram BB —逻辑 —音频 —电源管理 HW interface.
第二天 计算机基础技能培训 (一)linux基础知识
主流嵌入式Linux下GUI解决方案 基本概念介绍 GUI (graphical user interfaces)
陈香兰 助教:陈博、李春华 Spring 2009 嵌入式操作系统 陈香兰 助教:陈博、李春华 Spring 2009.
怎样从0开始写bootloader? 李明 北京亚嵌教育研究中心
CH.8 硬體管理.
陈香兰 助教:陈博、李春华 Spring 2009 嵌入式操作系统 陈香兰 助教:陈博、李春华 Spring 2009.
網路資源的建立--LINUX系統 國立東華大學電算中心 陳鴻彬.
伺服器探索營 Day 1 指導老師: 張啟中 (JohnAxer) 教學助理:
第2章 Linux安裝與問題排除 課前指引 本章,將分享如何在輕鬆、無負擔的前提,完成Linux作業系統的安裝程序,並且,將針對Linux認證考試必考的磁碟空間配置部份提供學習方向,讓讀者不僅學會Linux的安裝,更對於Linux考試的範圍有所體驗。
在專用的嵌入式板子運行 GNU/Linux 系統已經變得越來越流行。一個嵌入式 Linux 系統從軟體的角度看通常可以分為四個層次:
DMA-2440XP WinCE5.0安裝與使用 長高科技 顏旭偉.
嵌入式系统的Boot Loader技术 陈文智 浙江大学计算机学院 2009年5月.
Chapter 6 Linux 檔案權限與目錄配置 VBird 2005/08/03
作業系統實習課(三) -建造新的System Call-
内核移植基础.
Linux核心編譯與模組管理 2013/01/19.
Linux Debugging ls,ps,top,etc. printk() /proc i386提供的调试机制(断点,信号,单步执行)
Author:BobZhang Copy Right 2007
(第2版).
第二章 UNIX系统安装与常用命令.
Introduction to C Programming
如何有效率的學習Linux 培養組合能力 多用程式, 少寫程式 從錯誤訊息中學習 養成略讀 “各種文件” 加強英文基本閱讀能力 勤作筆記
Confidential Property
作業系統 Operating System 第四單元 檔案系統
作業系統 第十一章 檔案系統簡介.
嵌入式Linux开发流程 成都研究所操作系统团队.
ARM Developer Suite 介 绍.
实验一:编译运行Linux内核并使用gdb进行调试
第二章ADS1.2开发环境创建与简介.
第12章 Linux與 嵌入式uClinux系統
Linux文件系统.
第六章 文件系统与文件管理 6.4 Linux文件管理 1、比较MS DOS 与 Linux的目录结构 一、Linux文件系统的树形结构
Presentation transcript:

(第2版)

主讲内容 第8章 嵌入式系统Boot Loader技术 第9章 嵌入式Linux操作系统移植 第10章 嵌入式Linux设备驱动程序开发

第9章 嵌入式Linux操作系统移植 嵌入式Linux基本概念

第9章 嵌入式Linux操作系统移植 2.Linux系统的分类 (1)以功能差异和发行组织分类 标准linux。 μClinux。无MMU支持的linux系统,运行在无MMU的CPU上。Linux-RT。是最早在linux上实现硬实时支持的linux发行版本。 Linux/RTAI。 Embedix。由Lineo公司开发,基于PowerPC和x86平台开发的。Red Hat Linux。 红旗Linux等。 (2)以应用的嵌入式平台分类 在嵌入式Linux系统开发过程中,内核移植是将系统适合于自己特定的硬件平台系统的重要步骤,只有引导内核完毕,才能运行用户应用程序。

第9章 嵌入式Linux操作系统移植 3. Linux内核组成内存管理虚拟文件系统虚拟文件系统网络接口进程间通信. Linux内核由进程管理、内存管理、虚拟文件系统、网络接口和进程间通信五大子系统组成,各个子系统之间的依赖关系如图9-1所示。 内存管理 虚拟文件系统 网络接口 进程间通信

第9章 嵌入式Linux操作系统移植 (1)进程调度。 (2)内存管理。 (3)虚拟文件系统。 (4)网络接口。 (5)进程通信。 用户层 内核层 硬件层 用户应用程序 函数库 系统调用 进程管理 虚拟文件系统 设备管理程序 字符设备 块设备 进程通信 进程调度 内存管理

第9章 嵌入式Linux操作系统移植 结合图9-2,可以发现Linux内核中各个系统之间有如下关系: (1)进程调度处于中间。 (2)进程调度与内存管理的依赖关系 (3)进程间通信依赖于内存管理。 (4)虚拟文件系统与网络接口之间的关系。 (5)内存管理域虚拟文件系统之间的关系。

第9章 嵌入式Linux操作系统移植 2.Linux内核源码结构 Linux内核源码非常庞大,采用C语言和少量汇编实现,并且随着版本的发展不断增加。源码的工程管理采用目录树结构,并使用Makefile组织配置编译。 获得新的Linux2.6内核源码之后,一般首先仔细阅读顶层目录的README文件,了解对内核的概述和编译命令说明。 顶层目录中另一个比较重要的文件是Makefile,它是整个内核配置编译的核心文件,负责组织目录树中的子目录的配置编译管理,还决定了体系结构和内核版本号等。 部分主要目录结构见表9-1所示(注:表中带“/”的名称为目录,反之为文件)。

第9章 嵌入式Linux操作系统移植 (1)arch目录中包含和硬件体系结构相关的代码,每种平台占一个相应的子目录。 (2)drivers目录存放系统的设备驱动,每一种驱动程序各占一个子目录。 (3)fs目录中包含了文件系统源代码和各种文件的操作代码。 (4)其它目录和文件的说明见表格中描述。

第9章 嵌入式Linux操作系统移植 9.2 嵌入式Linux内核移植 内核的移植涉及到如下工作: 1.编写针对特定处理器的代码。内核中关于任务调度、中断处理等的代码要根据不同的处理器类型重新编写。 2.编写针对特定硬件平台的引导和初始化代码。基于同样的处理器,由于硬件系统设计上的不同,或者操作系统装载器的不同,需要实现有针对性的引导和初始化代码。 3.编写针对特定外设的设备驱动程序代码。 内核移植工作主要是修改跟硬件平台相关的代码,一般不涉及Linux内核通用的程序。

第9章 嵌入式Linux操作系统移植 9.2.1 内核修改 1.解压内核源码 使用如下命令进行加压: 9.2.1 内核修改 1.解压内核源码 使用如下命令进行加压: tar jxvf linux-2.6.32.4.tar.bz2 2.修改Makefile 整个Linux内核工程是以Makefile为核心完成编译和连接的。 进入内核源码目录,使用编辑工具打开一级目录下的Makefile文件,找到相关变量进行修改: ARCH ?= arm CROSS_COMPILE ?= arm-linux-

第9章 嵌入式Linux操作系统移植 3.修改目标板输入时钟 使用编辑工具打开内核源码目录中arch/arm/mach-s3c2440/mach-smdk2440.c文件,找到函数mini2440_map_io(void)的实现代码,如下: …… s3c24xx_init_clocks(12000000); 4.修改MTD分区 Linux下的MTD驱动程序接口被划分为两类模块:用户模块和硬件模块。 内核MTD分区必须与Bootloader分区相一致。 最后去掉ECC校验:将driver/mtd/nand/s3c2410.c文件中的“NAND_ECC_SOFT,”语句将其改为“NAND_ECC_NONE;”。

第9章 嵌入式Linux操作系统移植 5.配置yaffs2文件系统的补丁 使用如下命令解压补丁包: YAFFS意义为'yet another flash file system',也是一个开源的文件系统。YAFFS文件系统则是专门针对NAND flash的,源代码可以到 http://www.aleph1.co.uk/yaffs/index.html上下载。 使用如下命令解压补丁包: tar -zxvf root.tar.gz 进入补丁所在目录,使用如下命令打补丁: ./patch-ker.sh c <linux2.6 path> 其中<linux2.6 path>为linux内核源码所在目录。 上面命令执行过程中相当于完成以下三项操作: (1) 修改内核fs/Kconfig: 增加了一行:source "fs/yaffs2/Kconfig" (2) 修改内核fs/Kconfig 增加一行:ojb-$(CONFIG_YAFFS_FS) +=yaffs2/ (3) 在内核fs/目录下创建yaffs2目录

第9章 嵌入式Linux操作系统移植 9.2.2 内核配置 Linux内核版本不断更新,新的内核修订了旧内核的bug,并增加了许多新的特性。 为了正确、合理、有选择地使用内核提供的模块,设置内核编译配置选项,一般主要有下面几个考虑。 1.节省存储空间。 2.节省运行空间。 3.减少漏洞。 针对于一个新的目标系统按照上一节进行了内核的修改之后,就可以对内核进行进一步的配置工作。

第9章 嵌入式Linux操作系统移植 1.内核配置工具 配置工具主要包含Makefile、Kconfig和配置界面生成工具,这些项目可以由Kbuild系统调用,生成配置界面。配置界面是通过工具来生成的,工具通过Makefile编译执行,选项则是通过各级目录的Kconfig文件定义。 Linux 2.6内核中Makefile分类: Kernel Makefile——顶层目录下的Makefile文件 .config——内核配置文件 arch/$(ARCH)/Makefile——对应不同平台体系结构的Makefile scripts/Makefile.*——所有kbuild Makefiles的通用规则等定义 kbuild Makefiles——内核编译各级目录下的Makefile文件

第9章 嵌入式Linux操作系统移植 Kbuild大体上按照下列步骤执行编译过程。 内核配置,生成.config文件。 保存内核版本信息到include/linux/version.h。 创建链接符号include/asm,链接 include/asm-$(ARCH)源目录。 升级所有依赖的前提文件,在arch/$(ARCH)/Makefile中指定附加依赖条件。 递归地遍历各级子目录并且编译所有的目标。 init-*、core*、drivers-*、net-*、libs-*的目录变量值在 arch/$(ARCH)/Makefile 文件中有些扩展。 链接所有的目标文件,生成顶层目录的 vmlinux。链接的第一个目标文件在 head-y列表中,是在arch/$(ARCH)/Makefile中定义的。 最后,体系结构相关的部分作必须的后期处理,编译生成最终的引导映像。这可以包括编译引导记录;准备initrd映像等类似工作。

第9章 嵌入式Linux操作系统移植 (1)配置入口 在顶层的Makefile中,可以查找到如下几行定义的规则。 config %config: scripts_basic outputmakefile FORCE $(Q)mkdir -p include/linux $(Q)$(MAKE) $(build)=scripts/kconfig $@ (2)Kconfig 下面解释一下Kconfig的特点和语法。 ①菜单项 ②菜单属性 ③菜单依赖关系 ④菜单组织结构 ⑤Kconfig语法

第9章 嵌入式Linux操作系统移植 (3)内核编译方式 Kbuild系统使用Kbuild Makefile来编译内核或模块。 Kbuild Makefile的文件名不一定是Makefile,尽管推荐使用Makefile这个名字。 Kbuild Makefile的一个最主要功能就是指定编译什么,这个功能是通过两个对象指定的obj-?和xxx-objs。 obj-?语法:obj-? = $(target).o xxx-objs指定了编译对象需要的文件,一般只有在源文件是多个时才需要它。

第9章 嵌入式Linux操作系统移植 (4)配置选项 在进行配置之前,在内核目录下执行下列操作,生成平台默认配置文件.config: make s3c2410_defconfig 执行完后会出现:# configuration written to .config。 ①常规设置选项General setup ②引导模块支持Loadable module support ③块设备Enable the Block layer ④处理器类型及特性Processor type and features ⑤电源管理选项Power management options (ACPI, APM) ⑥总线选项Bus options ⑦用户可执行文件格式Executable file formats ⑧驱动程序配置选项Driver Drivers

第9章 嵌入式Linux操作系统移植 9.2.3 内核编译 编译的步骤就是执行一些相对固定的命令目标序列。 9.2.3 内核编译 编译的步骤就是执行一些相对固定的命令目标序列。 Kbuild还提供了许多可选的配置编译目标和规则。可以使用make help命令把所有的配置编译目标和说明信息打印到屏幕。 其中常用的配置编译目标有(其执行格式为:make <下列目标名之一>): (1)清理目标(Clean targets): (2)内核配置的目标(Configuration targets) (3)其他通用目标(Other generic targets) (4)静态解析器目标(Static analysers) (5)内核打包目标(Kernel packaging) (6)文档目标(Documentation targets) (7)ARM体系结构相关的目标(Architecture specific targets (arm)) (8)缺省目标

第9章 嵌入式Linux操作系统移植 内核编译产生了哪些目标,连接形成了哪些映像,这些映像是如何组成的,又处于Linux内核启动运行的哪个阶段 1.vmlinux映像:了解这个映像(vmlinux image)的构成。 2.zImage映像:嵌入式Linux系统的引导方式有两种,一种是上文所说的非压缩方式;另外一种是压缩方式。 zImage产生的过程。 Linux内核是一个很复杂的代码块,有许许多多的全局符号。它不使用符号名,而是通过变量或函数的地址来识别变量或函数名。 内核主要是用C写的,编译成目标代码或者映像就可以直接使用地址了。

第9章 嵌入式Linux操作系统移植 9.3 建立Linux根文件系统 1.文件系统介绍 2.Linux文件系统:包括以下几项内容: ①基本的文件系统结构,包含一些必需的目录比如:/dev,/proc,/bin,/etc,/lib,/usr,/tmp等。 ②基本程序运行所需的库函数,如 Glibc/uC-libc。 ③基本的系统配置文件,比如 rc,inittab等脚本文件。 ④必要的设备文件支持:/dev/hd*,/dev/tty*,/dev/fd0。 ⑤基本的应用程序,如sh,ls,cp,mv等。

第9章 嵌入式Linux操作系统移植 3.根文件系统的结构 (1)/dev 设备文件。 (2)/root root用户主目录。 (3)/usr。 (4)/var。 (5)/home。 (6)/proc。 (7)/bin。 (8)/sbin。 (9)/etc。           (10)/boot。        (11)/lib。          (12)/mnt。 (13)/tmp。          (14)/initrd

第9章 嵌入式Linux操作系统移植 4.制作根文件系统 (1)建立目录结构 (2)编译busybox (3)创建设备节点 (4)建立配置文件 (5)添加共享链接库 (6)制作映像

第9章 嵌入式Linux操作系统移植 9.4 下载目标文件 首先要通过目标板的JTAG接口将Bootloader映像下载到它的分区中 运行有Bootloader的目标板一般都具有下载操作系统内核和根文件系统的能力。 下载的命令为Load,说明如下: vivi> load help Usage: load <flash|ram> [ <partname> | <addr> <size> ] <x|y|z|t>