嵌入式Linux内核移植试验

合集下载

嵌入式Linux实时内核RTAI移植与测试

嵌入式Linux实时内核RTAI移植与测试

华中科技大学硕士学位论文嵌入式Linux实时内核RTAI移植与测试姓名:刘忠文申请学位级别:硕士专业:计算机应用技术指导教师:涂刚20080606华中科技大学硕士学位论文摘要作为最主要的开放源代码软件之一,Linux正迅速进入实时控制领域。

充分发挥了其性能稳定、兼容UNIX、支持多种处理器;网络功能强、安全性高、内核可以裁剪等一系列优点。

然而随着对实时性要求的越来越高,Linux内核机制的一些不足日益突显:不可抢占的内核、粗糙的时钟粒度、频繁的关中断等,使得Linux的实时性不强。

通过使用基于Linux核心的实时内核RTAI,完成了RTAI在特定硬件平台(S3C2410处理器)上的移植,实现了一个具有较好实时性能的Linux系统。

移植主要是针对如下几个部分进行的:首先是中断控制模块移植。

RTAI在中断处理机制方面采用中断虚拟器来接管所有中断,使Linux内核不能关硬件中断,从而实现了中断的实时响应。

结合S3C2410的中断控制逻辑实现了RTAI中断控制模块的移植;其次是细粒度时钟的实现。

RTAI增加了单次触发模式时钟,使得时钟中断在需要的时候发生,细化了系统时钟粒度。

通过利用S3C2410处理器的多个硬件定时器分别实现了单次触发模式及周期触发模式的时钟,完成了时钟部分的移植。

最后是实时内存管理方案的移植。

RTAI对实时内存的管理使用了共享内存及动态内存管理,同时利用了硬件平台上内存管理单元及缓存机制来优化实时内存的管理。

通过利用S3C2410的内存控制方式,实现了实时内核的内存管理功能。

在完成RTAI的移植后,对标准Linux及改进后的Linux系统在中断延迟进行了对比测试。

测试结果表明,改进后的Linux实时性能得到了很大的提高。

关键词:实时操作系统,实时中断,实时时钟,实时内存管理华中科技大学硕士学位论文AbstractAmong main open source softwares, Linux is quickly entering the real-time control field with open kernel source codes, stable performance, UNIX compatibility, multiple processes applicability, great network capabilities, high security and pruned kernel. Due to it’s non-preemptive kernel, coarse time granularity, frequently interrupt disable, virtual memory, process scheduling mechanism and other buffer mechanism, Linux is not so ”real-time” as an RTOS.Using the real-time kernel RTAI and Linux kernel, we completed the porting of real-time kernel to a specific hardware platform—S3C2410 platform, and got a real-time Linux. Porting was completed mainly from the following aspects: First, implementing the control of the interruption. Using an interrupt simulator to take over all the disruption, the Linux can not mask the hardware interruption , thus enabling real-time tasks and real-time interrupt rapid response. Different methods were taken by the RTAI due to different microprocessor platform, so we used the method of interrupt control for the S3C2410 microprocessor to achieve RTAI's control for the underlying hardware. This was followed by the porting of system clock. RTAI makes the system clock more refined granularity by setting one-shot mode timer to make the clock interrupt happen on needed time. We used a number of hardware clocks to achieve the respective one-shot mode mode clock and the periodic mode, completing the porting of system clock. Furthermore, we made use of the MMU、Cache、 memory management supported by S3C2410 to realize a dynamic memory management module.A real-time ability test was carried through based on the embedded system. Interrupt latency and task switch time were chosen to measure the real-time response capability of Linux before and after it be realtimed.Key words:RTOS, Real-time interrupt, Real-time clock, Real-time memory management华中科技大学硕士学位论文独创性声明本人声明所呈交的学位论文是我个人在导师指导下进行的研究工作及取得的研究成果。

实验5-3 Linux 内核移植实验

实验5-3 Linux 内核移植实验

实验 5-3 Linux-2.6.28移植实验【实验目的】熟悉Linux-2.6.28移植过程。

【实验步骤】第一步:从/pub/linux/kernel/v2.6下载linux-2.6.28.tar.bz2压缩文件(或光盘中提供);【图5-3-1】第二步:将linux-2.6.28.tar.bz2压缩文件复制到Linux工作目录;第三步:在Linux下利用tar jxvf linux-2.6.28.tar.bz2命令解压linux-2.6.28.tar.bz2压缩文件。

第四步:进入解压后的linux-2.6.28目录下,利用vi编辑工具修改linux-2.6.28目录下的顶层Makefile文件。

第五步:修改linux-2.6.28目录下的顶层Makefile文件,设置编译linux操作系统的CPU体系架构变量ARCH 和所使用的交叉编译工具链变量CROSS_COMPILE(注:实验使用arm-linux交叉编译工具链 4.2.1版本,可从/pub/snapgear/tools/arm-linux/下载arm-linux-tools-20070808.tar.gz压缩文件,解压到/OPT目录下)。

改为ARCH ?= armCROSS_COMPILE ?=/opt/usr/local/bin/arm-linux-【图5-3-2】第六步:将linux-2.6.28目录下的arch/arm/configs/mainstone_defconfig文件复制为xsbase270_defconfig文件。

第七步:在linux-2.6.28/arch/arm/mach-pxa目录下增加一个xsbase270.c文件(实际上从该目录下的mainstone.c复制而来.也可以直接复制实验代码中的文件),然后根据实际平台进行修改。

第八步:修改linux-2.6.28\arch\arm\mach-pxa目录下的Makefile文件,增加编译xsbase270.c 的编译选项,即:obj-$(CONFIG_MACH_XSBASE270) += xsbase270.o。

嵌入式μCLinux系统移植(全文)

嵌入式μCLinux系统移植(全文)

嵌入式μCLinux系统移植XX:1007-9416(20XX)04-0086-01嵌入式Linux系统在开发过程中需要对Linux内核进行重新定制,所以熟悉内核配置、编译和移植是非常重要的。

掌握一定的Linux内核的内容,是对Linux进行手动内核移植前必须要做的。

1 Linux内核移植Linux内核移植,通俗讲马上内核由一种硬件平台移植到另一种硬件平台上运行的方式。

虽然大部分的处理器和硬件平台,嵌入式Linux系统都可以支持,但最好还是以自己定制的硬件板为主,移植工作也可通过硬件平台的变化进行调整。

本文以Linux2.6.32.4版本内核为例,过程是如何将其移植到RM内核S3C2440处理器上,该处理器是Smsung公司出产的。

1.1 内核修改(1)解压内核源码。

加压命令:tr jxvf linux-2.6.32.4.tr.bz2。

(2)修改Mkefile。

Mkefile是贯穿整Linux内核的生命线,并以此完成编译和链接。

具体过程为:内核源码目录――进入一级目录(通过编译工具)――找到Mkefile文件――修改相关变量。

(3)修改目标板输入时钟。

内核源目录――找到文件rch/rm/mch-s3c2440/mch-smdk2440.c并打开(通过编译工具)――找到函数mini2440_mp_io(void)的实现代码:s3c24xx_init_clocks(12000000)。

此代码单位是Hz,是目标板中处理器晶振的频率的意思。

依照目标板实际晶振震荡器的大小进行修改,本文以12MHz晶振为例。

(4)修改MTD分区。

MTD驱动程序在Linux下,其接口分为用户模块和硬件模块两种。

将MTD子系统编译到内核中,是为了访问特定的闪存设备,并在它上面放置文件系统,这包括选择适当的MTD硬件和用户模块。

MTD子系统就目前而言,支持绝大多数的闪存设备,且不断的有更多的驱动程序添加进来,以用于不同的闪存芯片。

linux 2.6内核+根文件系统的移植实验

linux 2.6内核+根文件系统的移植实验

linux 2.6内核的移植实验概述:对于嵌入式linux系统来说,有各种体系结构的处理器和硬件平台,用户根据自己的需要定制的硬件平台,只要是硬件平台有一点点变化,就需要做一些移植工作,linux内核移植是嵌入式linux系统中最常见的一项工作。

由于linux内核具备可移植性的特点,并且已经支持了很多种目标板,这样,用户很容易从中找到跟自己硬件平台类似的目标板,参考内核已经支持的目标板来进行移植工作。

linux-2.6内核已经支持S3C2410处理器的多种硬件板,我们可以参考SMDK2410参考板来移植开发板的内核。

实验步骤:(1)准备工作(2)修改顶层Makefile(3)添加分区(4)添加devfs(5)配置编译内核一、准备工作建立工作目录,下载源码,安装交叉工具链,步骤如下。

mkdir /root/build_kernelcd /root/build_kernelwget -c /pub/linux/kernel/v2.6/linux2.6.14.1.tar.bz2tar jxvf linux2.6.14.1.tar.bz2export PATH=/usr/local/arm/3.3.2/binPATH二、修改顶层Makefile修改内核目录树根下的的Makefile,指明体系结构是arm,交叉编译工具是arm-linux-。

vi Makefile找到ARCH和CROSS_COMPILE,修改ARCH ?= armCROSS_COMPILE ?= arm-linux-保存退出。

三、设置flash分区此处一共要修改3个文件,分别是:arch/arm/mach-s3c2410/devs.c ;指明分区信息arch/arm/mach-s3c2410/mach-smdk2410.c ;指定启动时初始化drivers/mtd/nand/s3c2410.c ;禁止Flash ECC校验3.1指明分区信息在arch/arm/mach-s3c2410/devs.c文件中:vi arch/arm/mach-s3c2410/devs.c在arch/arm/mach-s3c2410/devs.c文件添加的内容包括:(1)添加包含头文件。

linux嵌入式实验报告

linux嵌入式实验报告

大连理工大学本科实验报告实验名称:嵌入式操作系统学院(系):计算机学院实验专业:计算机系班级:0703学号:学生姓名: mqlz2010年 12 月 6 日实验一:linux内核裁剪预习报告一、实验目的:1、了解Linux内核源代码的目录结构及各目录的相关内容2、了解Linux内核各配置选项内容和作用3、掌握Linux内核配置文件的作用4、握Linux内核的编译过程5、掌握将新增内核代码加入到Linux内核结构中的方法二、实验原理Linux对于计算机硬件、网络和文件系统等部件的驱动程序支持既可以放在系统内核中,也可以作为一个可加载的模块(modules)使用。

当驱动程序放在系统内核中时,Linux 假定该硬件是存在于系统中的;而作为可加载模块使用时,只有在知道该硬件存在于系统时才会作为系统内核的一部分,当 Linux 检测到硬件时,该模块才被加入到系统内核中。

三、实验步骤1、检查编译器的版本用低版本的编译器去编译高版本的内核有可能不能编译或使内核不能使用。

要查看编译器版本,可以执行命令:#gcc –v进入系统内核源代码目录。

一般系统内核的源代码放在 /usr/src/ 目录下。

用 ls –l 命令查看可能显示如下:#ls –l /usr/srcTotal 3lrwxrwxrwx 1 root root 12 May 4 14:36 >linux-2.4.20-8drwxr-xr-x 15 root root 1024 May 14 11:37drwxr-xr-x 3 root root 1024 May 4 14:38 sendmail其中、是一个链接文件,它的链接目标是指向目录,因此、cd 就是进入目录。

2、删除过时的目标文件进入 /usr/src/linux-2.4.20-8 目录,运行 make mrproper 命令以清除过时、旧的目标文件。

这是因为经过多次编译后系统会留下部分目标文件,如果没有清除干净可能造成本次编译出错。

LINUX移植和编译实验,实验六Linux内核移植实验.doc

LINUX移植和编译实验,实验六Linux内核移植实验.doc

LINUX移植和编译实验,实验六Linux内核移植实验.doc实验六Linux内核移植实验实验六 Linux内核移植实验⼀、实验⽬的1. 掌握交叉编译环境的建⽴和使⽤;2. 熟悉 Linux 开发环境,掌握 Linux 内核的配置和裁减;3. 了解 Linux 的启动过程。

⼆、实验环境预装Fedora10的pc机⼀台,CVT-A8系列实验箱$cd /opt/cvtech/kernel-s5pv210$make menuconfig如下图所⽰,在提⽰框中键⼊ config-s5pv210-b4y2 配置⽂件名,然后选择“Ok”确认,将退回到主菜单。

然后按“Esc”键退出,并将提⽰是否保存,请选择“Yes”保存。

2.编译:可以通过 make 或者 make zImage 进⾏编译,它们的差别在于 make zImage将 make ⽣成的核⼼进⾏压缩,并加⼊⼀段解压的启动代码,本实验采⽤ make zImage 编译。

$make zImage⽣成的 Linux 映像⽂件 zImage 保存在/opt/cvtech/kernel-s5pv210/arch/arm/boot/⽬录下。

5. 下载 Linux 核⼼并运⾏编译成功后的 Linux 核⼼为/opt/cvtech/kernel-s5pv210/arch/arm/boot/zImage。

通过 u-boot将该核⼼ zImage 下载到 SDRAM 中。

具体步骤:1. 编译 Linux 核⼼;$cd /opt/cvtech/kernel-s5pv210$make menuconfig选择“Load an Alternate Configuration File”,加载 config-s5pv210-b4y2 配置⽂件,保存并退出。

$make zImage编译成功后,拷贝 zImage 到下载⽬录$cp /opt/cvtech/kernel-s5pv210/arch/arm/boot/zImage /mnt/hgfs/share2. 下载 Linux 核⼼并运⾏。

嵌入式Linux之我行——Linux-2.6.30.4在2440上的移植之内核范文

嵌入式Linux之我行——Linux-2.6.30.4在2440上的移植之内核范文

嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤。

一为总结经验,二希望能给想入门嵌入式Linux的朋友提供方便。

如有错误之处,谢请指正。

一、移植环境
∙主机:VMWare--Fedora 9
∙开发板:Mini2440--64MB Nand
∙编译器:arm-linux-gcc-4.3.2
二、移植步骤
相关阅读:嵌入式Linux之我行——嵌入式数据库SQLite在2440上的移植1. 准备工作目录和解压内核源码
2. 进入内核根目录修改Makefile使之编译成ARM平台
3. 修改机器码,根据友善提供的VIVI里面的机器码是782,所以内核也要改成782才能启动
4. 修改系统平台时钟为12MHz(即:)
5. 修改Nand Flash分区。

这里只创建三个分区,其他多余的分区屏蔽掉
6. 配置内核选项
首先加载s3c24xx系列的通用配置,然后在此基础上修改
各配置选项如下。

这里只列出了要修改的项,其他的默认
配置完后将配置文件保存为.config,这样方便下次make menuconfig时默认加载上次配置过的文件
7. 交叉编译内核
如果没有任何错误,编译出来的内核在arch/arm/boot/目录下,文件zImage即是。

8. 将内核镜像文件zImage下载到Mini2440上测试
新内核2.6.30.4的使用:
64MB Nand Flash分区情况:
三、结束语
Ok,新的内核移植成功,但是现在开发板还不能正常运行,因为还有各种设备的驱动和文件系统没有移植,这些将在后续的篇章中一一讲述。

嵌入式Linux内核移植

嵌入式Linux内核移植

嵌入式Linux内核移植一、基于ARM的硬件BOOT程序的基本设计1.实验步骤本实验仅使用实验教学系统的CPU板。

在进行本实验时,LCD电源开关、音频的左右声道开关、AD通道选择开关、触摸屏中断选择开关等均应处在关闭状态。

基于ARM芯片的应用系统,多数为复杂的片上系统,该复杂系统里,多数硬件模块都是可配置的,需要由软件来预先设置其需要的工作状态,因此在用户的应用程序之前,需要由专门的一段代码来完成对系统基本的初始化工作。

由于此类代码直接面对处理器内核和硬件控制器进行编程,故一般均用汇编语言实现。

系统的基本初始化内容一般包括:(1)分配中断向量表(2)初始化存储器系统(3)初始化各工作模式的堆栈(4)初始化有特殊要求的硬件模块(5)初始化用户程序的执行环境(6)切换处理器的工作模式(7)呼叫主应用程序二、开发环境搭建实验1.实验原理绝大多数的Linux 软件开发都是以native 方式进行的,即本机(HOST)开发、调试,本机运行的方式。

这种方式通常不适合于嵌入式系统的软件开发,因为对于嵌入式系统的开发,没有足够的资源在本机(即板上系统)运行开发工具和调试工具。

通常嵌入式系统软件的开发采用交叉编译调试的方式。

交叉编译调试环境建立在宿主机(即一台PC 机)上,对应的开发板叫做目标板。

开发时使用宿主机上的交叉编译、汇编及连接工具形成可执行的二进制代码,(这种可执行代码并不能在宿主机上执行,而只能在目标板上执行。

)然后把可执行文件下载到目标机上运行。

调试时的方法很多,可以使用串口,以太网口等,具体使用哪种调试方法可以根据目标机处理器所提供的支持作出选择。

宿主机和目标板的处理器一般都不相同,宿主机为PXA270。

GNU 编译器提供这样的功能,在编译编译器时,可以选择开发所需的宿主机和目标机从而建立开发环境。

所以在进行嵌入式开发前第一步的工作就是要安装一台装有指定操作系统的PC 机作宿主开发机,对于嵌入式Linux,宿主机上的操作系统一般要求为Redhat Linux,在此,推荐使用Redhat 9.0 作为宿主机(开发主机)的操作系统。

第六章 嵌入式Linux内核移植

第六章 嵌入式Linux内核移植

5.2 Linux 2.6内核移植的准备
Linux 内核配置菜单选项分析
Memory Technology Devices (MTD) 在嵌入式设备中为了组成固态文件系统 (solid state filesystem, 即不旋转的,没有磁盘的)而需要的闪存, RAM, 和其它类似的芯片组等存储装置。
在菜单方式的配置界面上可用上下方向键来在各菜单 之间移动 在标有"---->" 标志的地方按回车键进入下级菜单 按两次<ESC>或选择<Exit>则返回到上级菜单
按“h” 键或选择下面的 <Help>则可看到配置帮助信 息
按<Tab> 键则在各控制选项之间移动
Y表示包含该功能选项配置在内核中,M表示以模块 的方式编译到内核中,N表示该功能选项不进行编译
而Windows 9x系列(包括Windows Me)并没有实现安全的 多任务环境,Windows 2000/NT虽在安全性上下了功夫,但 结果仍然存在诸多的安全隐患和漏洞。
5.1 Linux 内核版本及特点
Linux 2.6内核VS Linux 2.4内核
服务器领域
Linux 内核
嵌入式系统
本地文件系统
5.2 Linux 2.6内核移植的准备 Linux Makefile 语法
目录层次的迭代: 例如: obj-$(CONFIG_EXT2_FS) += ext2/ 假如CONFIG_EXT2_FS 的值为y或m,kbuild将会将 ext2目录列入向下迭代的目标中,但是其作用也仅限于 此,具体ext2目录下的文档是要作为模块编译还是链入 内核,还是有ext2目录下的Makefile文档的内容来决定 的。

内核实验2、Linux2.6内核移植实验

内核实验2、Linux2.6内核移植实验
Linux2.6 内核移植
一、 实验目的
移植 Linux2.6 内核到开发板,其它硬件资源驱动可以暂时不考虑 Samsung S3C2440A
Nand flash
Samsung K9D1208V0M 64M
RAM
64M
软件资源
cross toolchain 3.4.1
bootloader
<*>Support for AMD/Fujitsu flash chip <*>Support for ROM chip in bus mapping NAND Flash Device Drivers--->
................................ <*>NAND Device Support <*>NAND Flash support foe S3C2410/S3C2440 Soc Character devices---> ............................. [*]Non-standard serial port support [*]S3C2410 RTC Driver File systems---> <>Second extended fs support #去除 ext2 支持 Pseudo filesystems---> [*]Virtual memory file system support(former shm fs) [*]/dev file system support(OBSOLETE) [*]Automatically mount at boot(NEW) Miscellaneous filesystems---> ............................ <*>JFFS2 <*>cramfs ............................. Network File Systems----> <*>NFS file system support 保存退出

嵌入式实验四(Linux 内核移植及 LED 驱动测试)

嵌入式实验四(Linux 内核移植及 LED 驱动测试)

实验四 Linux 内核移植及 LED 驱动测试一、实验目的:1.熟悉 Linux 内核基本目录结构,为后续 Linux 底层开发做准备,熟悉 Linux 内核的配置及编译过程。

2.了解嵌入式 Linux 驱动开发基本方法,熟悉嵌入式 Linux 字符设备驱动的开发框架。

二、实验内容:1.下载或拷贝 Linux-3.14 源码。

2.针对实验箱配置内核。

3.编译内核并测试。

4.利用 Exynos4412 的 GPX2_7、GPX1_0、GPX2_4、GPX3_0 这 4个 I/O 引脚控制 4 个 LED 发光二极管,使其闪烁。

三、实验原理:1.Linux内核是Linux操作系统的核心,也是整个Linux功能体现。

它是用C语言编写,符合POSIX标准。

Linux最早是由芬兰黑客Linus Torvalds为尝试在英特尔X86架构上提供自由免费的类Unix操作系统而开发的。

该计划开始于1991年,这里有一份Linus Torvalds当时在Usenet新闻组comp.os.minix所登载的帖子,这份著名的帖子标志着Linux计划的正式开始。

在计划的早期有一些Minix黑客提供了协助,而今天全球无数程序员正在为该计划无偿提供帮助。

Linux内核源代码非常庞大,随着版本的发展不断增加。

它使用1目录树结构,并且使用Makefile组织配置编译。

顶层目录的Makefile 是整个内核配置编译的核心文件,负责组织目录树中子目录的编译管理,还可以设置体系结构和版本号等。

嵌入式系统中内核移植需根据具体硬件配置对内核源码进行相应地修改、配置。

2. 如图所示,LED2~LED5分别与GPX2_7、GPX1_0、GPX2_4、GPF3_5相连,通过GPX2_7、GPX1_0、GPX2_4、GPX3_0引脚的高低电平来控制三极管的导通性,从而控制LED的亮灭。

当这几个引脚输出高电平时发光二极管点亮;反之,发光二极管熄灭。

基于ARM9嵌入式Linux内核的移植

基于ARM9嵌入式Linux内核的移植

-113-1.引言操作系统的移植是指通过对操作系统的改造,使同一个操作系统可以在不同的硬件平台上运行。

如果一个系统可以在不同硬件平台上运行,那么这个系统就是可移植的。

Linux 操作系统就可以通过移植,运行在ARM 等多种硬件平台上。

考虑到嵌入式系统是“硬件可裁减”的,以及不同的用户需求,我们需要对已有的内核代码进行裁减移植。

一般情况下的Linux 内核的剪裁及移植,主要是针对操作系统中关于具体硬件以及除去不需要的功能模块,如一些不会用到的外设支持、驱动程序、协议、网络支持、文件格式等。

Linux 内核具有很好的模块性和伸缩性,在资源要求严格的情况下经过合理的裁减可获得明显的效果[1]。

Linux 内核支持很多的硬件体系结构如ARM,PowerPC 等,但由于新的硬件设备不断出现,根据新的硬件平台移植内核是嵌入式系统构建的必须工作。

2.交叉编译环境的建立Linux 下的交叉编译环境主要包括以下几个部分:针对目标系统的编译器gcc ;针对目标系统的二进制工具binutils ;目标系统的标准c 库glibc ;目标系统的Linux 内核头文件,G D B 调试工具。

交叉编译环境的建立主要是在Linux 下创建以上工具。

这里重点介绍gcc 建立过程:基于ARM9嵌入式Linux内核的移植方兴 贵州师范大学机械与电气工程学院 5500021).下载arm-linux-gcc.3.3.2.tgz 软件包到宿主机Linux 操作系统上。

2).在终端下解压安装交叉编译器,命令如下:tar xvzf arm-linux-gcc.3.3.2.tgz /usr/local/arm3).修改环境变量:为了方便的使用arm-linux-gcc 编译器系统,最好把arm-linux 工具链目录加入到环境变量PATH 中,即修改/etc/profile 文件,在PATH 变量中加入pathmunge /usr/local/arm/3.3.2/bin 语句。

Linux2_6内核到ARM嵌入式平台的移植及其实时性测试_王慧娟

Linux2_6内核到ARM嵌入式平台的移植及其实时性测试_王慧娟

Linux2.6内核到ARM 嵌入式平台的移植及其实时性测试王慧娟 袁全波(北华航天工业学院计算机科学与工程系,河北廊坊065000)摘 要:L inux 2.6内核自发布以来,其实时性使得它在嵌入式领域有了更广阔的应用,本文介绍了如何将Lin -ux 2.6内核移植到A T 91RM 9200微处理器的嵌入式平台的,并在此基础上对Linux 2.6内核在该平台的实时性的量化结果与在同一平台上Linux 2.4内核进行对比分析,验证了Linux 2.6内核在实时性方面的增强。

关键词:AT 91RM 9200;嵌入式;串口;驱动程序中图分类号:T P316 文献标识码:A 文章编号:1673-7938(2009)06-0006-03基金项目:北华航天工业学院基金项目(KY -2008-09)收稿日期:2009-02-28作者简介:作者简介:王慧娟(1982-),女,助教,硕士,河北省大城县人,从事嵌入式系统开发与研究。

0 引 言Linux2.6内核相对于以前的Linux 版本,在很多方面都有了很大进步。

尤其是内核实时性方面的改进,使它在嵌入式应用方面有了更广泛的前景。

ARM 是针对嵌入式应用设计的一种RISC 体系结构,具有低成本、高性能等优点。

ARM 处理器包括多个系列,我们目标板采用的ATMEL 公司的AT91RM9200处理器芯片采用的是ARM9系列中ARM920T 核,是一款在很多领域被应用的优秀的微处理器。

1 Linu x2.6内核到ARM 开发板的移植我们自主开发的控制板,选用Linux2.4内核,为了满足更高的实时性要求,将Linux2.6内核移至其上。

开发板硬件列出如下:CPU :AT91ARM 9200SDRAM:48LC8M16A FLASH:INTEL JS28F128以太网芯片:HR620H 50S针对开发板的硬件,按如下步骤移植。

1.1 交叉编译环境的建立为了方便,使用版本号为3.4.1的arm -linux -g cc -3.4.1.tar.bz2编译器作为编译环境。

嵌入式Linux内核移植试验

嵌入式Linux内核移植试验

07秋嵌入式实验1. 实验设备的连接1. 参看《JXARM9-2410-1用户手册》中第一章,熟悉目标设备硬件,进行硬件检测。

2. 参看《JXARM9-2410-1用户手册》中第二章,安装好实验设备:电源,并口等。

3. 参看《JXARM9-2410-1用户手册》中第三章,了解目标设备硬件资源。

2. 软件安装与设置参看《JXARM9-2410-1用户手册》中第四章,在主机Windows环境下安装实验环境:ADT,而DNW(一种超级终端软件)和tftp可以直接运行。

3. ADT IDE 开发流程参看《JXARM9-2410-1用户手册》中第五章,通过并口线连接目标机的简易仿真口(ARM9SIMPLE),进行无操作系统实验:(实验教材P38)(1)对于包含ADT 1000仿真器的用户,请选择ARM9LPT,对于简易调试器的用户,请选择ARM9SIMPLE,本实验选择ARM9SIMPLE。

(2)导入examples目录中的工作区文件“examples.aws”,调试运行leddemo、stepper 等程序(3)注意:要运行的工程需设置为当前工程4. Uboot基本实验参看《JXARM9-2410-1用户手册》中第七章的“7.2 Windows环境下使用u-boot”:(实验教材P186)(1)将连接目标机简易仿真口的并口线去掉,连接好UART0串口线,网线。

(2)在宿主机打开远程登陆软件DNW(或者超级终端),选择115200,COM1,建立与目标机的连接(3)重新启动目标机,在DNW中会看到与目标机LCD相同的信息,表示连接成功!(4)在超级终端中使用Uboot命令行接口,练习Uboot的基本命令:help、flinfo、bdinfo、md、dmp、printenv、setenv、saveenv、run等5. 嵌入式Linux内核移植实验参看《JXARM9-2410-1用户手册》中第六章(1)参看6.1和6.2节,熟悉交叉开发环境,建立宿主机环境。

LINUX内核移植实验

LINUX内核移植实验

4 LINUX内核移植实验4.1 资源1.linux-2.6.24.4.tar.bz2 (Linux内核源码的压缩包,下载地址)2.yaffs2.tar.gz (yaffs文件系统源码的压缩包)3.dm9000.h和dm9000.c (dm9000网卡驱动程序)4.2 解压源码包1.在XP中,把“04/下午/src”文件夹拷贝到“//192.168.1.12”的共享文件夹uptech内,并把uptech中的“src”更名为“04 linux”2.在Linux虚拟机中进入该文件夹“cd /home/uptech/04 linux”ls可见4个文件:“linux-2.6.24.4.tar.bz2”、“yaffs2.tar.gz”、“dm9000.h”、“dm9000.c”◆bz2压缩包用“tar jxvf”解压◆gz压缩包用“tar zxvf”解压3.解压Linux源码压缩包,即输入命令“tar jxvf linux-2.6.24.4.tar.bz2”4.解压YAFFS源码压缩包,即输入命令“tar zxvf yaffs2.tar.gz”4.3 修改Makefile文件,支持交叉编译1.cd /home/uptech/04 linux/linux-2.6.24.2,该目录下就是linux的内核源码2.修改Makefile文件,使之支持交叉编译,也就是在Linux上编译出ARM开发板上运行的内核程序。

ARCH ?= arm (目标平台是arm)CROSS_COMPILE ?= arm-linux-(交叉编译器的前缀是arm-linux-) 4.4 得到.config文件1.得到.config文件将“/home/uptech/04 linux/linux-2.6.24.2/arch/arm/configs/s3c2410_defconfig”文件拷贝成“/home/uptech/04 linux/linux-2.6.24.2/.config”cp arch/arm/configs/s3c2410_defconfig .config2.对内核进行裁剪(此时暂时不做裁剪,仅是看看)make menuconfig4.5 修改Nand Flash分区修改“/home/uptech/04 linux/linux-2.6.24.2/arch/arm/plat-s3c24xx/common-smdk.c”文件中的“struct mtd-partition smdk_default_nand_part[]”这个结构体:第一个分区从0x0000 0000 到0x0008 0000,大小为0.5M第二个分区从0x0008 0000 到0x0028 0000,大小为2M第三个分区从0x0028 0000 到0x0068 0000,大小为4M第四个分区从0x0068 0000 到0x0400 0000,大小为57.5M具体做法:(1) vi arch/arm/plat-s3c24xx/common-smdk.c(2)修改分区信息结构体static struct mtd_partition smdk_default_nand_part[] = {[0] = {.name = "Bootloader",.size = 0x80000,.offset = 0,},[1] = {.name = "Linux Kernel",.offset = 0x80000,.size = SZ_2M,},[2] = {.name = "Root File System",.offset = 0x280000,.size = SZ_4M,},[3] = {.name = "User Space",.offset = 0x680000,.size = 0x3980000,},};4.6 添加LCD支持修改“/home/uptech/04 linux/linux-2.6.24.2/arch/arm/mach-s3c2410/mach-smdk2410.c”。

嵌入式系统设计实验三 LINUX内核在arm平台上的移植

嵌入式系统设计实验三 LINUX内核在arm平台上的移植
• 在/arch/arm/boot/bootp目录中,有个init.S的ARM汇编文件, 它就是引导Linux内核在arm平台上启动的初始化代码。它里 面定义了一个全局符号_start,它定义了默认的起始地址,同 时它也是整体内核二进制镜像的起始标志。
• Init.S主要完成以下功能:
◆定义数据、代码段、bbs(未初始化数据段)起始地址变量并对bbs段初始化 ◆设置寄存器以初始化系统硬件 ◆关闭中断 ◆初始化LCD显示 ◆将数据段复制到内存 ◆跳转到内核起始函数start_kernel继续执行 ◆对主寄存器的修改
• * it under the terms of the GNU General Public License version 2 as
• * published by the Free Software Foundation.
• uClinux是通过对标准Linux内核裁减,去除虚拟内存管理部 分的代码,并对内存分配进行优化,从而达到提高系统运 行效率的目的。
• 因此uClinux的应用程序开发要求用户自己正确的处理内存 管理,一旦错误地修改了其他进程的内存,将可能造成系 统死机。基于像ARM2410这样的ARM9内核的ARM-Linux使 用了MMU的内存管理,对进程有保护,提高了嵌入式系 统中多进程的保护能力。使用户应用程序的可靠性得以提 高,降低了用户的开发难度。
结构相关的内存管理代码位于arch/*/kernel目录下。 • /net目录,里面是核心的网络部分代码,其每个子目录对
应于网络的一个方面。
• 其他目录,Documentation目录存放了许多文档。scripts目 录存放配置内核的一些脚本文件。
Linux内核移植 1
• Linux内核的移植主要包含启动代码的修改,内核的链接及装 入,参数传递,内核引导几个部分。我们在移植工作中要改 动的代码主要集中在与体系结构相关部分。

嵌入式Linux系统移植

嵌入式Linux系统移植
对于任何平台,都必须包含以下几个子目录: • boot:包含启动内核所使用的部分或全部平台特有代码 • kernel:存放支持体系结构特有的(如信号处理和SMP)特征的实现 • lib:存放高速的体系结构特有的(如strlen和memcpy)通用函数的实现 • mm:存放体系结构特有的内存管理程序的实现 • math-emu:模拟FPU的代码。对于arm处理器来说,此目录用mach-
• Gcc的版本有很多种,其中低于3.3.2版本的只能编译 Linux2.4版本的内核,而3.3.2既能支持Linux2.4版本的内 核,也能支持Linux2.6版本的内核.
• 我们采用arm-linux-gcc 3.4.1
2020/3/8
操作系统实验
13
构建交叉编译环境
• 下载交叉编译工具包 /pub/armlinux/toolchain/
2020/3/8
操作系统实验
6
字节顺序
• 字节顺序byte order是指一个字中字节排列的顺序
• 不同硬件可能采用不同byte order
– x86 little-endian
– ppc big-endian
• Linux内核将硬件的byte order放在<asm/byteorder.h> 里面定义, __BIG_ENDIAN或__LITTLE_ENDIAN
2020/3/8
操作系统实验
19
Linux内核的arch目录
• 进入arch目录,每个体系结构代码都有一 个子目录
• 进入arm目录,在arm体系结构下我们可以 看到很多sub-arch的子目录
2020/3/8
操作系统实验
20
实现sub-arch
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

07秋嵌入式实验
1. 实验设备的连接
1. 参看《JXARM9-2410-1用户手册》中第一章,熟悉目标设备硬件,进行硬件检测。

2. 参看《JXARM9-2410-1用户手册》中第二章,安装好实验设备:电源,并口等。

3. 参看《JXARM9-2410-1用户手册》中第三章,了解目标设备硬件资源。

2. 软件安装与设置
参看《JXARM9-2410-1用户手册》中第四章,在主机Windows环境下安装实验环境:ADT,而DNW(一种超级终端软件)和tftp可以直接运行。

3. ADT IDE 开发流程
参看《JXARM9-2410-1用户手册》中第五章,通过并口线连接目标机的简易仿真口(ARM9SIMPLE),进行无操作系统实验:(实验教材P38)
(1)对于包含ADT 1000仿真器的用户,请选择ARM9LPT,对于简易调试器的用户,请选择ARM9SIMPLE,本实验选择ARM9SIMPLE。

(2)导入examples目录中的工作区文件“examples.aws”,调试运行leddemo、stepper 等程序
(3)注意:要运行的工程需设置为当前工程
4. Uboot基本实验
参看《JXARM9-2410-1用户手册》中第七章的“7.2 Windows环境下使用u-boot”:(实验教材P186)
(1)将连接目标机简易仿真口的并口线去掉,连接好UART0串口线,网线。

(2)在宿主机打开远程登陆软件DNW(或者超级终端),选择115200,COM1,建立与目标机的连接
(3)重新启动目标机,在DNW中会看到与目标机LCD相同的信息,表示连接成功!
(4)在超级终端中使用Uboot命令行接口,练习Uboot的基本命令:help、flinfo、bdinfo、md、dmp、printenv、setenv、saveenv、run等
5. 嵌入式Linux内核移植实验
参看《JXARM9-2410-1用户手册》中第六章
(1)参看6.1和6.2节,熟悉交叉开发环境,建立宿主机环境。

(2)参看6.4节,进行内核的编译:
a)在虚拟机中,启动linux,用户名root,密码123456
b)打开一个终端,按照实验教材P199的步骤编译内核
$ cd /home/cvtech/jx2410/linux
$ make menuconfig (使用config-jx2410配置文件)
$ make dep
$ make zImage
(3)参看6.5节,配置好主机IP和目标机IP,保证在同一网段,然后将内核镜像下载到目标机的SDRAM中运行
$ cp /home/cvtech/jx2410/root/ramdisk.gz /tftpboot (拷贝ramdisk文件系统到tftp根目录)
$ cp /home/cvtech/jx2410/linux/arch/arm/boot/zImage /tftpboot (拷贝内核镜像文件到tftp根目录)
利用DNW连接Uboot,执行以下命令分别下载文件系统和内核镜像:
# tftp 30800000 ramdisk.gz
# tftp 30008000 zImage
在目标机内存SDRAM中,直接运行内核镜像,观察LCD的效果
# go 30008000
6. linux应用程序实验
参看《JXARM9-2410-1用户手册》中第六章的6.6节:(实验教材P205)
(1)在主机端编译并运行Helloworld程序
$cd /home/cvtech/jx2410/examples/helloworld
$vi helloworld.c
$gcc –o helloworld helloworld.c
$./helloworld
(2)编译能够在目标机运行的helloworld,观察使用的gcc编译器,同时用到了Makefile文件
$vi Makefile
$make
$./helloworld (出错!想想为什么?)
(3)将编译好的helloworld下载到目标机
$cp helloworld /tftpboot/examples
在目标机Uboot中,执行以下命令:
#mount 192.168.1.180:/tftpboot/ /mnt/nfs
#cd /mnt/nfs/examples/
#./ helloworld
观察输出结果!
7. linux驱动程序实验
(1)编写驱动程序源代码以及测试程序源代码,观察四个文件:drv.c drv.h drvtest.c Makefile :(实验教材P220)
$cd /home/cvtech/jx2410/examples/drvtest
(2)编译驱动程序,生成drv.o
$make clean
$make
$cp drv.o /tftpboot/examples
(3)编译测试程序,生成drvtest
$/usr/local/arm/2.95.3/bin/arm-linux-gcc -o drvtest drvtest.c
$cp drvtest /tftpboot/examples
(4)在目标机Uboot中,安装驱动,并运行测试程序
#mount 192.168.1.180:/tftpboot/ /mnt/nfs
#cd /mnt/nfs/examples
注册驱动
#insmod drv.o
注册设备文件
#mknod /dev/drvtest c 100 0
#./drvtest
观察输出结果!
8. WinCE内核定制实验
在vmware中,安装Windows XP professional版本,之后再安装wince
(1)WinCE的安装,BSP的安装:参看《ARM嵌入式WINCE实践教程》的第一章:
a)Wince的光盘中,有关于开发板的BSP,将smdk2410.Cec文件导入PB
b)注意:安装完WinCE以后,解决模拟器不能正常显示的问题
(2)参看“WINCE模拟器实验说明文档.ppt”,编译并生成镜像,然后在模拟器中进行调试
注意:模拟器工程的配置需要仔细看,模拟器需要的内存最好设置为128M
(3)参看《ARM嵌入式WINCE实践教程》的第二章,定制内核并下载到目标机运行
a)在桌面Windows XP professional中,首先设置IP地址为192.168.1.180(最好
关闭虚拟机,避免IP冲突。

如果修改不成功,试试对“本地连接”进行“修
复”),并且关闭防火墙,之后安装tftp,并设置tftpboot根目录为
/s3c2410/flashupdate,最后连接目标机Uboot
执行以下命令,下载内核镜象:
# tftp 30200000 nk.nb0
然后运行内核镜像:
# go 30200000
注意:在vmware中的XP如何与桌面XP共享文件夹?
(1)首先在vmware中启动windows XP, 然后选择VM—install vmware tools
(2)之后,选择VM—setting---option,设置Shared Folders
(3)如何找到共享文件夹:打开资源管理器----工具----映射网络驱动器。

相关文档
最新文档