当前位置:文档之家› 嵌入式Linux内核移植

嵌入式Linux内核移植

嵌入式Linux内核移植
嵌入式Linux内核移植

1嵌入式Linux内核移植

姓名:成炼学号:081141

实验目的

l 了解Linux内核源代码的目录结构及各目录的相关内容

l 了解Linux内核各配置选项内容和作用

l 掌握Linux内核配置文件的作用

l 掌握Linux内核的编译过程

l 掌握将新增内核代码加入到Linux内核结构中的方法

实验指引

尽管目前Linux 2.6版本内核已经增加了很多对ARM体系甚至是S3C2410 CPU的支持,但仍然需要对内核作一些小的修改来适应我们的开发板,并且需要重新配置、编译和重新生成新的内核映像。本实验着重从NAND Flash分区到下载到开发板等一系列连贯的操作来进行嵌入式Linux内核的移植。本实验的内核版本为2.6.26。

1. NAND Flash分区

从Nand Flash启动时,S3C2410硬件会自动把Nand Flash前4K代码拷贝芯片内部RAM空间,CPU其实是从内部RAM开始执行代码的,所以vivi必须放到Nand Flash顶端。vivi 开始执行后将初始化硬件设备、建立内存空间映射表,为调用内核做好准备;然后把压缩的内核映像加载到SDRAM中;最后跳转到内核映像入口,启动内核。

内核MTD分区必须与vivi分区相一致。因为,vivi分区中的地址是引导程序、内核映像及文件系统下载到Nand Flash的真正地址;而内核启动时,内核并不是去读vivi分区中的地址,而是去读内核MTD分区设定的地址;所以,如果内核MTD分区与vivi分区不相同,很可能导致不能正常启动内核及读取文件系统。

1.1 vivi的重新分区

根据开发板的Nand Flash大小及开发用途确定新的vivi分区,如表1.1。

表1.1 vivi的分区信息表

打开vivi源代码下的arch/s3c2410/smdk.c文件,在函数:“mtd_partition_default_mtd_partitions[]={}”中可以看到vivi默认的Nand Flash分区信息。根据表2的新分区信息,在上述函数中以相同的格式修改原有分区信息即可完成vivi的重新分区。这里可以参考vivi的使用手册,《Getting started with vivi》。

1.2 内核MTD的重新分区

在给内核MTD重新分区之前,有一点应该注意,2.6.16(含)以前内核与2.6.17(含)以后内核的MTD重新分区方法是不一样的,前者是需要增加新的分区信息,而后者源代码初始文件中已含分区信息,需要的是修改分区信息。我们此次实验选用的内核为2.6.26, 其相应的修改如下:

在源代码linux-2.6.26/arch/arm/plat-s3c2410xx/common-smdk.c文件下的“mtd_partition smdk_default_nand_part[]={}”中,可以看到默认的MTD分区。根据表1.1,以相同的格式修改原分区信息即可完成MTD的重新分区。

/* NAND parititon from 2.4.18-swl5 */

static struct mtd_partition smdk_default_nand_part[] = {

[0] = {

.name = "ViVi",

.size = 0x00020000,

.offset = 0x00000000,

},

[1] = {

.name = "param",

.offset = 0x00020000,

.size = 0x00010000,

},

[2] = {

.name = "kernel",

.offset = 0x00030000,

.size = 0x00400000,

},

[3] = {

.name = "root",

.offset = 0x00430000,

.size = 0x00300000,

},

[4] = {

.name = "yaffs",

.offset = 0x00730000,

.size = 0x03800000,

},

[5] = {

.name = "ucos",

.offset = 0x3f300000,

.size = 0x000cc000,

}

#if 0

[6] = {

.name = "S3C2410 flash partition 6",

.offset = 0x3f300000,

.size = SZ_1M * 24,

},

[7] = {

.name = "S3C2410 flash partition 7",

.offset = SZ_1M * 48,

.size = SZ_16M,

}

#endif

};

默认情况下分了8个区,而我们需要规划其中的6个分区,因此将后面的部分用#if 0和#endif 包含起来,暂时不使用。在设置每个分区的大小(.size)和偏移量(.offset)时要小心,不要导致分区重叠,并且内核和跟文件系统的偏移量设置与BootLoader中的设置保持一致,其原因上面已经分析过了。

2. 内核的配置的基本结构

2.1 Linux内核的配置系统由四个部分组成

Makefile:分布在Linux内核源码中的Makefile,定义Linux内核的编译规则;顶层Makefile 是整个内核配置、编译的总体控制文件;

配置文件(config.in):给用户提供配置选择的功能;config:内核配置文件,包括由用户选择的配置选项,用来存放内核配置后的结果;

配置工具:包括对配置脚本中使用的配置命令进行解释的配置命令解释器和配置用户界面(基于字符界面:make config;基于Ncurses图形界面:make menuconfig;基于xWindows 图形界面:make xconfig)

Rules.make:规则文件,被所有的Makefile使用。

2.2 编译规则Makefile

利用make menuconfig(或make config、make xconfig)对Linux内核进行配置后,系统将产生配置文件(.config)。在编译时,顶层Makefile 将读取.config 中的配置选择。

顶层Makefile完成产生核心文件(vmlinux)和内核模块(module)两个任务,为了达到此目的,顶层Makefile 递归进入到内核的各个子目录中,分别调用位于这些子目录中的Makefile,然后进行编译。至于到底进入哪些子目录,取决于内核的配置。顶层Makefile中的include arch/$(ARCH)/Makefile指定特定CPU 体系结构下的Makefile,这个Makefile包含了特定平台相关的信息。

各个子目录下的Makefile 同样也根据配置文件(.config)给出的配置信息,构造出当前配置下需要的源文件列表,并在文件最后有include $(TOPDIR)/Rules.make。

顶层Makefile 定义并向环境中输出了许多变量,为各个子目录下的Makefile 传递一些变量信息。有些变量,比如SUBDIRS,不仅在顶层Makefile 中定义并且赋初值,而且在arch/*/Makefile 还作了扩充。

2.3编译内核的常用命令

精简Linux内核常用命令包括:make config、make dep、make clean、make mrproper、make zImage、make bzImage、make modules、make modules_install,用于配置内核,编译内核和编译安装模块。其中make zImage是我们本次实验用到的编译内核的命令。

3.内核编译过程

内核的配置主要通过make menuconfig或者是make xconfig这样的图形化界面来完成。不过在某些情况下特别是嵌入式环境下还需要手工配置文件或是修改makefile。

3.1 修改makefile文件

我们需要编译用于ARM开发板的内核,使用的编译器是arm-linux-gcc。Makefile文件修改如下:

ARCH ?= $(SUBARCH)

CROSS_COMPILE ?=

修改为:

ARCH ?= arm

CROSS_COMPILE ?= /usr/local/arm/xxxx/bin/arm-linux-gcc-

这里ARCH=arm说明目标是ARM体系结构,默认的ARCH是指宿主机的体系,如i386;CROSS_COMPILE=arm-linux-说明使用交叉编译器前缀为arm-linux-,默认情况下为空。

3.2 添加devfs配置

devfs指的是设备文件系统(Device Filesystem),其作用在于提供一个更为方便的方式来管理通常位于/dev目录的所有块设备和字符设备等。Linux可以支持很多不同种类的硬件,这意味着/dev目录中可能需要数百个特殊文件来表示所有这些设备,而且往往对一些目前不存在的设备,也保留这些设备文件以备将来可以用到,这样是不方便的。Devfs用于自动管理这些设备文件,所有需要的设备节点都由内核自动创建,而不需要的则不会出现在/dev目录下。

Devfs文件系统从2.3内核开始支持,但是在2.6内核中已被逐渐舍弃,我们使用的2.6.26版本的内核中已经没有了支持devfs的配置选项(代码级别上仍然支持,仅仅是去掉了配置选项),而在较早的2.6内核中则该设置被标注为obsolete(过时的)。然而对于嵌入式Linux 来说,devfs可提供较强的灵活性和紧缩而准确的/dev目录,确实是一项比较方便的配置,因此我们采用手动的方式把它恢复过来。

Devfs配置在Filesystem配置菜单下的Pseudo filesystems中,对应的配置文件是fs/Kconfig,我们可以在此fs/Kconfig的基础上做如下修改:

895 menu "Pseudo filesystems"

896

897 config DEVFS_FS

898 bool "/dev file system support(obsolete)"

899 default y

900

901 config DEVFS_MOUNT

902 bool "Automatically mount at boot"

903 default y

904 depends on DEVFS_FS

905

906 config PROC_FS

907 bool "/proc file system support" if EMBEDDED

908 default y

909 help

其中粗体部分(897~890行)是添加的内容,其作用是让内核在编译时加入devfs文件系统的支持,在后面的make menuconfig时可以看到,加入这些内容之后出现了与devfs相关的配置选项。注意这里将默认的设置设为了default y,即默认被选中。

3.3 make menuconfig 配置内核

这是一种显示文本菜单的配置方式,使用最广泛。如果.config存在,则使用.config文件的默认配置。

make menuconfig

此后就可以看到内核配置界面,如图4.1所示。

图4.1 内核配置界面

3.4 读取已有的配置文件

2.6.26版本的内核已经为S3C2410 CPU准备了默认的配置文件,位置在arch/arm/configs/s3c2410_defconfig。一般情况下很多选择默认即可,但是特别要注意的是要修改启动参数。

Boot Options--->Default kernel command string,

修改如下:

在arch/arm/configs/s3c2410_defconfig中

CONFIG_CMDLINE=root=/dev/mtdblock2 init=/linuxrc console=ttySAC0,115200 mem=64M

进入配置菜单后,可以通过Load an Alternate Configuration File选项来读取这个默认配置,如图4.2所示。

图4.2 读取配置文件

或者直接将其拷贝过来,命名为.config,这样make menuconfig就会读取该.config文件作为默认配置。

cp arch/arm/configs/s3c2410_defconfig .config

3.5 选择具体的配置选项

内核移植关键的步骤就在于配置哪些选项是必须选择,哪些选项是不用选的。实际上在配置时,大部分选项可以使用其默认值,只有少部分需要根据用户不同的需要选择。选择的原则,是将与内核其它部分关系较远且不经常使用的部分功能代码编译成可加载模块,有利于减小内核的大小,减小内核消耗的内存,简化该功能相应的环境改变时对内核的影响。不需要的功能就不选,与内核关系紧密而且经常使用的部分功能代码直接编译到内核中。

make dep

注:如果是2.4内核,这一步是需要的,而对于2.6内核则不需要

3.6 生成zImage内核镜像文件

配置好内核选项并清除残留文件之后,就来编译内核zImage:

make zImage

完成之后会出现以下的字样:

Kernel: arch/arm/boot/Image is ready

AS arch/arm/boot/compressed/head.o

GZIP arch/arm/boot/compressed/piggy.gz

AS arch/arm/boot/compressed/piggy.o

CC arch/arm/boot/compressed/misc.o

LD arch/arm/boot/compressed/vmlinux

OBJCOPY arch/arm/boot/zImage

Kernel: arch/arm/boot/zImage is ready

这表明在arch/arm/boot/目录下生成了Image和zImage两个内核映像文件,其中Image为正常大小的映像文件,而zImage为压缩后的映像文件。

注:在编译用于i386的2.6内核时,需要使用make bzImage命令而不是make zImage命令来编译内核映像,这是由于i386体系的CPU有保护寻址和实模式寻址的限制,内核启动时需要作一些调整。对于ARM体系的CPU则没有这样的限制,仍然可以采用make zImage 命令来编译内核映像。

注意:

1.make dep应用在内核2.4或之前,在2.6内核中已取消该命令。

2.make clean删除前面留下的中间文件,该命令不会删除.config等配置文件。

3.make zImage 编译生成gzip压缩形成的image文件。

4.make bzImage编译生成较大一点的内核文件。

5.生成的zImage文件在arch/arm/boot/ 目录中。

3.7 编译和安装模块

在前面配置时选择了内核支持可加载模块,并且选择了一些需要的模块作为动态加载,这里来编译它们,并且在制作根文件系统时需要将它们复制到根文件系统中。

把在make menuconfig里面说选择为M的选项全部编译成模块,其命令格式如下:

make modules

模块编译好以后,需要执行安装。默认情况下,模块会被安装到/lib/modules,这里是使用交

叉编译器和目标板,所以需要设定目标路径,一般可通过INSTALL_MOD_PATH=$TARGETDIR来指定安装路径,其中TARGETDIR就是指定的安装路径。例如:

make modules_install INSTALL_MOD_PATH=./

这里指定安装路径是当前目录,在制作根文件系统时需要从这里复制模块文件到根文件系统的目录中。

4.下载内核到开发板

编译完Linux内核后,就可以将其下载到开发板上运行,在下载内核之前,需要开发板上已经有了BootLoader。在这次实验时已经将ViVi移植到了开发板上。本次实验我们只是测试内核,而不将其写入Flash中,在BootLoader的命令行输入一下命令:

load ram 0x30008000 x

boot ram

注:上述两行语句中的ttySAC0、0x00440000部分,跟第一部分内核移植是不同的。这里测试没有使用ramdisk文件系统,原因是前面移植的文件系统不能在这个内核下使用,需要移植更高版本的busybox才能使用。

使用xmodem协议将内核下载到flash中,其命令如下:

load flash kernel x

然后在超级终端中选择,“发送->发送文件“,选择需要发送的内核即可,等待数分钟。

此时需要注意的是,需要将vivi传送给linux内核的参数设置正确,否则即使能够加载内核到内存,也不能顺利启动内核,在vivi中设置:

par am set linux_cmd_line “root=/dev/mtdblock2 init=/linuxrc console=ttySAC0,115200”

param save

然后执行,

boot

出现如下信息,就表明内核能够运行在开发板上了。

Uncompressing Linux.............................................................rder: 1, 8192 bytes)

.......................................... done, booting the kernel.

Page-cache has

Linux version 2.6.26 (chenglian@chenglian-desktop) (gcc version 3.4.1) #1 Fri Ma

。。。

Kernel command line: noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0,IC on S3C2410X, 281kHz clock

。。。

在vivi中设定的启动参数在这里起到了作用——“console=ttySAC0 “的配置使得内核启动时将信息打印在串口设备上。在启动过程中还可以看到Flash分区的信息,可以看到这和前面说修改的分区是一致的。

NAND device: Manufacturer ID: 0xec, Chip ID: 0x76 (Samsung NAND 64MiB 3,3V 8-bit

0x00020000-0x00030000 : "param"tucos [{cmds}]

0x00030000-0x00430000 : "kernel" sy

0x00430000-0x00730000 : "root" lib mnt root t

0x00730000-0x03f30000 : "yaffs" -- Help about

0x03f300000-0x3f3cc000: "ucos"

在本次实验中主要是内核的移植,还没有根文件系统,内核启动完毕之后去寻找根文件系统时会出现Kernel panic,即内核崩溃:

List of all partitions:

1f00 128 mtdblock0 (driver?)

1f01 64 mtdblock1 (driver?)

1f02 4096 mtdblock2 (driver?)

1f03 3072 mtdblock3 (driver?)

1f04 57344 mtdblock4 (driver?)

No filesystem could mount root, tried: ext3 ext2 cramfs msdos vfat romfs

Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,2)

这是在终端设备上说看到的最后的信息,说明内核到这里就停止了——在启动参数中指定的/dev/mtdblock3分区上找不到可用的文件系统,也没有linuxrc。若果加上文件系统和启动脚本就可以正常运行。

5.小结

本实验主要做了如何移植Linux内核,使它可以工作在开发板上。移植过程中比较复杂的地方在于如何给Flash分区,如何根据自己的需要划分。配置和编译内核部分细节比较的多也比较繁琐,需要仔细操作。下载内核则更是一波三折,如xmodem选择等方面。总之,经过这次实验,我对内核移植的步骤更加清晰。

Yaff2文件系统的编译

(1)下载YAFFS文件系统代码,下载网址:

https://www.doczj.com/doc/7a5956067.html,/cgi-bin/viewcvs.cgi/

点击页面左下角的Download tarball即可下载全部相关代码。也可在此处下载

当然如果你的NAND FLASH只是512+16B的,可以只移植yaffs,因为即使你移植了yaffs2,它也会自动选择挂载yaffs1的。

#cd /public

#tar zxf yaffs2.tar.gz

则/public/yaff2/ 目录之下即是yaffs2的源码。

(2)在要移植的内核目录下建立yaffs2文件夹,并将需要的文件拷贝过来:

#cd /public/linux-2.6.11.7-2410/

# cd fs

# mkdir yaffs2

# cd yaffs2

# cp /public/yaffs2/*.h .

# cp /public/yaffs2/*.c .

# cp /public/yaffs2/Makefile-kernel Makefile

# cp /public/yaffs2/Kconfig .

(3)修改/public/linux-2.6.11.7-2410/fs/Makefile 和Kconfig文件。

# cd /public/linux-2.6.11.7-2410/fs/

# vi Makefile (将下面一行添加到Makefile中)

obj-$(CONFIG_YAFFS_FS) += yaffs2/

# vi Kconfig (将下面一行添加到Kconfig中)

source "fs/yaffs2/Kconfig

(4)cd /public/linux-2.6.11.7-2410/

make menuconfig

在编译内核时选择:

<*> YAFFS2 file system support

<*> 512 byte / page devices

<*> Lets Yaffs do its own ECC

<*> 2048 byte (or larger) / page devices

<*> Autoselect yaffs2 format

<*> Disable lazy loading

<*> Turn off wide tnodes

<*> Turn off debug chunk erase check

(5) 编译内核make zImage

看网上有人编译过程中出现了问题,我没有碰到任何问题,很顺利。

By the way : 编译yaffs时出现了问题,编译通过不了,这也是我选择yaff2 而没有选yaffs的一大原因。

(6) 现在板子上跑的是2.4的内核,将板子上的根文件系统换为yaffs文件系统。具体过程参见文档。

然后在vivi >param set linux_cmd_line "noinitrd root=/dev/mtdblock/3 init=/linuxrc console=ttySAC0"

修改启动参数,然后烧写刚才生成的2.6的内核。

实验四Linux内核移植实验

合肥学院 嵌入式系统设计实验报告 (2013- 2014第二学期) 专业: 实验项目:实验四 Linux内核移植实验 实验时间: 2014 年 5 月 12 实验成员: _____ 指导老师:干开峰 电子信息与电气工程系 2014年4月制

一、实验目的 1、熟悉嵌入式Linux的内核相关代码分布情况。 2、掌握Linux内核移植过程。 3、学会编译和测试Linux内核。 二、实验内容 本实验了解Linux2.6.32代码结构,基于S3C2440处理器,完成Linux2.6.32内核移植,并完成编译和在目标开发板上测试通过。 三、实验步骤 1、使用光盘自带源码默认配置Linux内核 ⑴在光盘linux文件夹中找到linux-2.6.32.2-mini2440.tar.gz源码文件。 输入命令:#tar –jxvf linux-2.6.32.2-mini2440-20110413.tar对其进行解压。 ⑵执行以下命令来使用缺省配置文件config_x35 输入命令#cp config_mini2440_x35 .config;(注意:x35后面有个空格,然后有个“.”开头的 config ) 然后执行“make menuconfig”命令,但是会出现出现缺少ncurses libraries的错误,如下图所示: 解决办法:输入sudo apt-get install libncurses5-dev 命令进行在线安装ncurses libraries服务。

安装好之后在make menuconfig一下就会出现如下图所示。 ⑶配置内核界面,不用做任何更改,在主菜单里选择退出,并选“Yes”保存设置返回到刚命令行界面,生成相应配置的头文件。 编译内核: #make clean #make zImage 在执行#make zImage命令时会出现如下错误: 错误:arch/arm/mach-s3c2440/mach-mini2440.c:156: error: unknown field 'sets' specified in initializer 通过网上查找资料 于是在自己的mach-mini2440.c中加入 #include

基于32位ARM920T内核的微处理器的嵌入式Linux系统构建详解

基于32位ARM920T内核的微处理器的嵌入式Linux系统构建详解目前,在嵌入式系统中基于ARM微核的嵌入式处理器已经成为市场主流。随着ARM技术的广泛应用,建立面向ARM构架的嵌入式操作系统成为当前研究的热点问题。 已经涌现出许多嵌入式操作系统,如VxWork,windows-CE,PalmOS,Linux等。在众多的嵌入式操作系统中,Linux以其开源代码及免费使用倍受开发人员的喜爱。本文选用的微处理器S3C2410是基于32位ARM920T内核的微处理器,基于此处理器构造一Linux 嵌入式操作系统,将其移植到基于32位的ARM920T内核的系统中,在此基础上进行应用程序开发。 l、开发环境介绍 1.1、基于S3C2410ARM920T的硬件平台 该系统的硬件平台为深圳旋极公司提供,硬件的核心部件为三星$3C2410ARM920T芯片,外围还包括:64MNANDFLASH和RAM外围存储芯片;串口、网口和USB外围接口;CSTNLCD和触摸屏外围显示设备;UDAl34lTS的外围音频设备。S3C2410处理器和外围设备共同构成了基于ARM920T的开发板。 1.2、嵌入式Limlx软件系统 该嵌入式Linux的软件系统包括以下4个部分:引导加载程序vivi;Linux2.6.14内核;YAFFS2文件系统以及用户程序。他们的可执行映像依次存放在系统存储设备上. 与通常的嵌入式系统布局有所不同,本系统在引导加载程序和内核映像之间还增加了一个启动参数区,在这个区里存放着系统启动参数。引导加载程序通过调用这些参数来决定启动模式、启动等待时间等,这些启动参数的增加加强了系统的灵活性。本系统采用64MNANDFLASH的存储设备。 2、嵌入式Linux系统设计与实现 2.1、引导加载程序vivi

LInux 嵌入式操作系统期末试题

1.简答题:请简单概括什么是嵌入式系统、并举出嵌入式系统的特点;(6分) 答: 嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可剪裁,适用于应用系统,对功能、可靠性、成本、体积、功耗等方面有特殊要求的专用计算机系统; 其特点如下: (1)嵌入式系统是面向特定系统应用的。 (2)嵌入式系统涉及计算机技术、微电子技术、电子技术、通信和软件等各个行业; 是一个技术密集、资金密集、高度分散、不断创新的知识集成系统; (3)嵌入式系统的硬件和软件都必须具有高度可定制性;只有这样才能适应嵌入式系 统应用的需要,在产品价格和性能方面具备竞争力; (4)嵌入式系统的生命周期相当长。 (5)嵌入式系统不具备本地系统开发能力,通常需要有一套专门的开发工具和环境。 2.嵌入式操作系统的优势:1.低成本开发系统 2.可应用多种硬件平台 3.可定制内核 4. 性能优异 5.良好的网络支持 3.linux文件类型:1.普通文件 2.目录文件 3.链接文件 4.设备文件 a.块设备文件(硬 盘:/dev/hda1)b.字符设备(串行端口接口设备) 4.linux文件属性:访问权限:r:可读w:可写x:可执行用户级别:u:文件拥有者g:所 属用户组 o:其他用户第一个字符显示文件类型:-普通d目录 l 链接… 5.简答题:(6分) linux目录结构:/bin 存放linux常用操作命令的执行文件(二进制文件) /boot 操作系统启动时所需要的程序 /dev Linux系统中使用的外部设备 /etc 系统管理时所需要的各种配置文件和子目录 /etc/rc.d Linux启动和关闭时要用到的脚本 /etc/rc.d/init Linux默认服务的启动脚本 /home 系统中默认用户工作根目录 /lib 存放系统动态链接共享库 /mnt软驱、光驱、硬盘的挂载点 /proc存放系统核心与执行程序所需信息、 /root超级用户登陆时的主目录 /sbin 存放管理员常用系统管理程序 /usr存放用户应用程序和文件 /var存放日志信息(答六点即可) 6.编写一个shell文件:创建studen01 –student30这30个用户,用户组为class1,之 后编写shell文件,删除所有用户

嵌入式Linux内核移植详解(顶嵌)

内核移植阶段 内核是操作系统最基本的部分。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并且内核决定一个程序在什么时候对某部分硬件操作多长时间。直接对硬件操作是非常复杂的,所以内核通常提供一种硬件抽象的方法来完成这些操作。硬件抽象隐藏了复杂性,为应用软件和硬件提供了一套简洁,统一的接口,使程序设计更为简单。 内核和用户界面共同为用户提供了操作计算机的方便方式。也就是我们在windows下看到的操作系统了。由于内核的源码提供了非常广泛的硬件支持,通用性很好,所以移植起来就方便了许多,我们需要做的就是针对我们要移植的对象,对内核源码进行相应的配置,如果出现内核源码中不支持的硬件这时就需要我们自己添加相应的驱动程序了。 一.移植准备 1. 目标板 我们还是选用之前bootloader移植选用的开发板参数请参考上文的地址: https://www.doczj.com/doc/7a5956067.html,/thread-80832-5-1.html。bootloader移植准备。 2. 内核源码 这里我们选用比较新的内核源码版本linux-2.6.25.8,他的下载地址是 ftp://https://www.doczj.com/doc/7a5956067.html,/pub/linux/kernel/v2.6/linux-2.6.25.8.tar.bz2。 3. 烧写工具 我们选用网口进行烧写这就需要内核在才裁剪的时候要对网卡进行支持 4. 知识储备 要进行内核裁剪不可缺少的是要对内核源码的目录结构有一定的了解这里进 行简单介绍。 (1)arch/: arch子目录包括了所有和体系结构相关的核心代码。它的每一个子 目录都代表一种支持的体系结构,例如i386就是关于intel cpu及与之相兼容体 系结构的子目录。PC机一般都基于此目录。 (2)block/:部分块设备驱动程序。 (3)crypto:常用加密和散列算法(如AES、SHA等),还有一些压缩和CRC校验 算法。 (4) documentation/:文档目录,没有内核代码,只是一套有用的文档。 (5) drivers/:放置系统所有的设备驱动程序;每种驱动程序又各占用一个子目 录:如,/block 下为块设备驱动程序,比如ide(ide.c)。 (6)fs/:所有的文件系统代码和各种类型的文件操作代码,它的每一个子目录支持 一个文件系统, 例如fat和ext2。

02--基于ARM9的Linux2.6内核移植

基于ARM9的Linux2.6内核移植 姓名 系别、专业 导师姓名、职称 完成时间

目录 摘要................................................... I ABSTARCT................................................ II 1 绪论.. (1) 1.1课题研究的背景、目的和意义 (1) 1.2嵌入式系统现状及发展趋势 (1) 1.3论文的主要工作 (4) 2 嵌入式 Linux系统构成和软件开发环境 (5) 2.1嵌入式Linux系统的体系结构 (5) 2.2嵌入式Linux系统硬件平台 (5) 2.3嵌入式Linux开发软件平台建立 (7) 2.4本章小结 (11) 3 嵌入式Linux的引导BootLoader程序 (12) 3.1 BootLoader概述 (12) 3.2 NAND Flash和NOR Flash的区别 (13) 3.3本章小结 (19) 4 Linux内核的编译、移植 (20) 4.1 Linux2.6内核的新特性简介 (20) 4.2 Linux内核启动流程 (20) 4.3内核移植的实现 (21) 4.4 MTD内核分区 (23) 4.5配置、编译内核 (24) 4.6本章小结 (26) 5 文件系统制作 (27) 5.1 yaffs文件系统简介 (27) 5.2 内核支持YAFFS文件系统 (27) 5.3本章小结 (30) 6测试 (31) 6.1简单测试方法的介绍 (31) 6.2编写简单C程序测试移植的系统 (31) 6.3在开发板执行测试程序 (32)

LInux嵌入式操作系统期末试题

简答题:请简单概括什么是嵌入式系统、并举出嵌入式系统的特点;(6分) 答: 嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可剪裁,适用于应用系统,对功能、可靠性、成本、体积、功耗等方面有特殊要求的专用计算机系统; 其特点如下: (1)嵌入式系统是面向特定系统应用的。 (2)嵌入式系统涉及计算机技术、微电子技术、电子技术、通信和软件等各个行业; 是一个技术密集、资金密集、高度分散、不断创新的知识集成系统; (3)嵌入式系统的硬件和软件都必须具有高度可定制性;只有这样才能适应嵌入式系统应用的需要,在产 品价格和性能方面具备竞争力; (4)嵌入式系统的生命周期相当长。 (5)嵌入式系统不具备本地系统开发能力,通常需要有一套专门的开发工具和环境。 嵌入式操作系统的优势:1.低成本开发系统 2.可应用多种硬件平台 3.可定制内核 4.性能优异 5.良好的网络支持 linux文件类型:1.普通文件2.目录文件3.链接文件4.设备文件a.块设备文件(硬盘:/dev/hda1)b.字符设备(串行端口接口设备) linux文件属性:访问权限:r:可读w:可写x:可执行用户级别:u:文件拥有者g:所属用户组o:其他用户第一个字符显示文件类型:- 普通 d 目录 l 链接… 简答题:(6分) linux目录结构:/bin 存放linux常用操作命令的执行文件(二进制文件) /boot 操作系统启动时所需要的程序 /dev Linux系统中使用的外部设备 /etc 系统管理时所需要的各种配置文件和子目录 /etc/rc.d Linux启动和关闭时要用到的脚本 /etc/rc.d/init Linux默认服务的启动脚本 /home 系统中默认用户工作根目录 /lib 存放系统动态链接共享库 /mnt软驱、光驱、硬盘的挂载点 /proc存放系统核心与执行程序所需信息、 /root超级用户登陆时的主目录 /sbin 存放管理员常用系统管理程序 /usr存放用户应用程序和文件 /var存放日志信息(答六点即可) 编写一个shell文件:创建studen01 –student30这30个用户,用户组为class1,之后编写shell文件,删除所有用户 操作步骤:1.打开Terminal(终端): 2.输入vi shell 3.输入i 进入编辑模式 4.输入 #!/bin/bash groupadd class1 for((i=1;i<10;i++)) do username=student0$i

Linux内核移植开发手册

江苏中科龙梦科技有限公司 Linux内核移植开发手册 修 订 记 录 项 次 修订日期 版 本修订內容修订者审 核 1 2009‐02‐04 0.1 初版发行陶宏亮, 胡洪兵 2 2009‐11‐20 0.2 删除一些 多余文字 陶宏亮, 胡洪兵

DISCLAIMER THIS DOCUMENTATION IS PROVIDED FOR USE WITH LEMOTE PRODUCTS. NO LICENSE TO LEMOTE PROPERTY RIGHTS IS GRANTED. LEMOTE ASSUMES NO LIABILITY, PROVIDES NO WARRANTY EITHER EXPRESSED OR IMPLIED RELATING TO THE USAGE, OR INTELLECTUAL PROPERTY RIGHT INFRINGEMENT EXCEPT AS PROVIDED FOR BY LEMOTE TERMS AND CONDITIONS OF SALE. LEMOTE PRODUCTS ARE NOT DESIGNED FOR AND SHOULD NOT BE USED IN ANY MEDICAL OR LIFE SUSTAINING OR SUPPORTING EQUIPMENT. ALL INFORMATION IN THIS DOCUMENT SHOULD BE TREATED AS PRELIMINARY. LEMOTE MAY MAKE CHANGES TO THIS DOCUMENT WITHOUT NOTICE. ANYONE RELYING ON THIS DOCUMENTATION SHOULD CONTACT LEMOTE FOR THE CURRENT DOCUMENTATION AND ERRATA. JIANGSU LEMOTE TECHNOLOGY CORPORATION LIMITED MENGLAN INDUSTRIAL PARK,YUSHAN,CHANGSHU CITY,JIANGSU PROVINCE,CHINA Tel: 0512‐52308661 Fax: 0512‐52308688 Http: //https://www.doczj.com/doc/7a5956067.html,

基于ARM的嵌入式linux内核的裁剪与移植.

基于ARM的嵌入式linux内核的裁剪与 移植 0引言微处理器的产生为价格低廉、结构小巧的CPU和外设的连接提供了稳定可靠的硬件架构,这样,限制嵌入式系统发展的瓶颈就突出表现在了软件方面。尽管从八十年代末开始,已经陆续出现了一些嵌入式操作系统(比较著名的有Vxwork、pSOS、Neculeus和WindowsCE)。但这些专用操作系统都是商业化产品,其高昂的价格使许多低端产品的小公司望而却步;而且,源代码封闭性也大大限制了开发者的积极性。而Linux的开放性,使得许多人都认为Linu 0 引言 微处理器的产生为价格低廉、结构小巧的CPU和外设的连接提供了稳定可靠的硬件架构,这样,限制嵌入式系统发展的瓶颈就突出表现在了软件方面。尽管从八十年代末开始,已经陆续出现了一些嵌入式操作系统(比较著名的有Vxwork、pSOS、Nec uleus和Windows CE)。但这些专用操作系统都是商业化产品,其高昂的价格使许多低端产品的小公司望而却步;而且,源代码封闭性也大大限制了开发者的积极性。而Linux的开放性,使得许多人都认为Linux 非常适合多数Intemet设备。Linux操作系统可以支持不同的设备和不同的配置。Linux对厂商不偏不倚,而且成本极低,因而很快成为用于各种设备的操作系统。嵌入式linux是大势所趋,其巨大的市场潜力与酝酿的无限商机必然会吸引众多的厂商进入这一领域。 1 嵌入式linux操作系统 Linux为嵌入操作系统提供了一个极有吸引力的选择,它是个和Unix 相似、以核心为基础、全内存保护、多任务、多进程的操作系统。可以支持广泛的计算机硬件,包括X86、Alpha、Sparc、MIPS、PPC、ARM、NEC、MOTOROLA 等现有的大部分芯片。Linux的程序源码全部公开,任何人都可以根据自己的需要裁剪内核,以适应自己的系统。文章以将linux移植到ARM920T内核的 s3c2410处理器芯片为例,介绍了嵌入式linux内核的裁剪以及移植过程,文中介绍的基本原理与方法技巧也可用于其它芯片。 2 内核移植过程 2.1 建立交叉编译环境 交叉编译的任务主要是在一个平台上生成可以在另一个平台上执行的程序代码。不同的CPU需要有不同的编译器,交叉编译如同翻译一样,它可以把相同的程序代码翻译成不同的CPU对应语言。 交叉编译器完整的安装涉及到多个软件安装,最重要的有binutils、gcc、glibc三个。其中,binutils主要用于生成一些辅助工具;gcc则用来生成交叉编译器,主要生成arm—linux—gcc交叉编译工具;glibc主要是提供用户程序所使用的一些基本的函数库。 自行搭建交叉编译环境通常比较复杂,而且很容易出错。本文使用的是

我来说linux移植过程

我对linux移植过程的整体理解 首先,要开始移植一个操作系统,我们要明白为什么要移植。因为我们要在另外一个平台上用到操作系统,为什么要用操作系统,不用行不行?这个问题的答案不是行或不行来回答。单片机,ARM7都没有操作系统,我们直接对寄存器进行操作进而实现我们需要的功能也是可以。但是,一些大型的项目设计牵涉很多到工程的创建,单纯对裸机进行操作会显得杂乱庞大这时候需要一个操作系统。 操作系统的功能能。我们用到操作系统,一方面可以控制我们的硬件和维护我们的硬件,另一方面可以为我们得应用程序提供服务。呵呵,这样说还是很抽象,具体到项目中就可以感受到操作系统的好处。 Linux操作系统的移植说白了总共三大部分:一,内核的重新编译。二,bootloader的重新编译。三,文件系统的制作。在这里要解释这些名词也很不好说的明白,首先,一个完整的操作系统是包括这三大部分的,内核、Bootloader、文件系统。我们知道Linux有很多版本,不同的版本只是文件系统不一样而内核的本质都是一样的。 那么,我们开始进行移植。首先是内核。1.我们需要下载一个内核源码,这个在网上很好下载,下载后,保存下。2.把这个压缩包复制到ubuntu(我用的版本)里,一般复制到/home/dong/SoftEmbed(我的目录,呵呵),然后呢,我们需要对这个内核进行修改重新编译,为什么要这样做,因为我们要让内核为我们的ARM服务,所以需要修改一些东西的。至于具体如何修改,我已经写在另外一个文档里了。3.修改的内容主要是 Makefile(设置体系架构为arm,设置交叉编译器)、时钟频率(我们板子的频率)、内核配置(进入内核配置主要是设置一些选项以适合我们的开发板)。具体设置步骤我会另加说明。4.设置好后我们需要重新编译内核,用的是make zImage命令。编译后就生成了我们自己编译好的内核,呵呵。 接下来,进行文件系统的移植。我们需要一个Yaffs2文件系统压缩包。1.复制这个压缩包到/home/dong/SoftEmede(我自己在ubuntu里建的目录,呵呵),2.解压,会生成一个文件夹。3.给内核打补丁,通过执行 ./patsh-ker.sh c /内核目录。呵呵4.进入 make menuconfig中配置选项,要选择对yaffs2的支持,具体怎么设置我写在另一个文档。 接下来,我们进行根文件制作,需要一个制作工具 mkyaffs2image.taz.还是复制到我自己的目录下,解压,安装。接着,我们需要对Busybox的移植、配置,具体移植、配置步骤我另写,呵呵。最后是构建我们自己的文件系统,到此我们已经完成了内核移植和文件系统的制作。准备移植,呵呵。今天先写到这里,累了。

基于ARM的嵌入式linux 内核的裁剪与移植.

基于ARM的嵌入式linux 内核的裁剪 与移植 摘要:实现了一种全集成可变带宽中频宽带低通滤波器,讨论分析了跨导放大器-电容(OTA—C)连续时间型滤波器的结构、设计和具体实现,使用外部可编程电路对所设计滤波器带宽进行控制,并利用ADS软件进行电路设计和仿真验证。仿真结果表明,该滤波器带宽的可调范围为1~26 MHz,阻带抑制率大于35 dB,带内波纹小于0.5 dB,采用1.8 V电源,TSMC 0.18μm CMOS工艺库仿真,功耗小于21 mW,频响曲线接近理想状态。关键词:Butte 0 引言 微处理器的产生为价格低廉、结构小巧的CPU和外设的连接提供了稳定可靠的硬件架构,这样,限制嵌入式系统发展的瓶颈就突出表现在了软件方面。尽管从八十年代末开始,已经陆续出现了一些嵌入式操作系统(比较著名的有Vxwork、pSOS、Neculeus和Windows CE)。但这些专用操作系统都是商业化产品,其高昂的价格使许多低端产品的小公司望而却步;而且,源代码封闭性也大大限制了开发者的积极性。而Linux的开放性,使得许多人都认为Linux 非常适合多数Intemet设备。Linux操作系统可以支持不同的设备和不同的配置。Linux对厂商不偏不倚,而且成本极低,因而很快成为用于各种设备的操作系统。嵌入式linux是大势所趋,其巨大的市场潜力与酝酿的无限商机必然会吸引众多的厂商进入这一领域。 1 嵌入式linux操作系统 Linux为嵌入操作系统提供了一个极有吸引力的选择,它是个和Unix 相似、以核心为基础、全内存保护、多任务、多进程的操作系统。可以支持广泛的计算机硬件,包括X86、Alpha、Sparc、MIPS、PPC、ARM、NEC、MOTOROLA 等现有的大部分芯片。Linux的程序源码全部公开,任何人都可以根据自己的需要裁剪内核,以适应自己的系统。文章以将linux移植到ARM920T内核的 s3c2410处理器芯片为例,介绍了嵌入式linux内核的裁剪以及移植过程,文中介绍的基本原理与方法技巧也可用于其它芯片。 2 内核移植过程 2.1 建立交叉编译环境 交叉编译的任务主要是在一个平台上生成可以在另一个平台上执行的程序代码。不同的CPU需要有不同的编译器,交叉编译如同翻译一样,它可以把相同的程序代码翻译成不同的CPU对应语言。 交叉编译器完整的安装涉及到多个软件安装,最重要的有binutils、gcc、glibc三个。其中,binutils主要用于生成一些辅助工具;gcc则用来生成交叉编译器,主要生成arm—linux—gcc交叉编译工具;glibc主要是提供用户程序所使用的一些基本的函数库。 自行搭建交叉编译环境通常比较复杂,而且很容易出错。本文使用的是

华清远见嵌入式Linux课程

课程名称:嵌入式学院—嵌入式LINUX工程师就业培训班 上课时间为:上午9:00—12:00 下午13:30—17:30 (每天7小时正式上课时间)晚自习18:00—21:00 第一阶段:嵌入式Linux软件工程师 ?职场定位:Linux Development Engineer for Software Engineering ?本期目标:嵌入式系统是现在最热门的计算机应用领域之一,嵌入式C语言在其中起着至关重要的作用。一个精通C语言程序设计的程序员,可以很容易地进入Linux、WinCE、Vxworks等嵌入式操作系统下的软件开发工作。本阶段学习目标是掌握C语言基本知识、C编程语法基础和 Linux操作系统的使用,并熟练掌握嵌入式Linux的开发环境,为将来的编程工作打基础。

第二阶段:嵌入式Linux系统工程师 ?职场定位:Linux Development Engineer for Embedded Systems ?证书:微软嵌入式工程师认证证书(认证费500元),红帽公司《Linux应用开发工程师证书》(认证费500元) ?本期目标:参加本期培训的学员应该掌握嵌入式C语言编程技巧。嵌入式Linux应用开发和系统开发是嵌入式Linux中最重要的一部分,也是企业人才需求最广的一部分。本期学习的主要目标是精通嵌入式Linux下的程序设计,熟悉嵌入式Linux开发流程,强化学员对Linux应用开发的理解和编码调试的能力,同时掌握bootloader和kernel的移植技能,了解ARM体系结构和编程,具备ARM硬件接口的基础知识,并了解Linux内核开发相关内容,初步掌握Linux下的驱动程序开发方法。另外,本期课程还会让学员了解另外一个比较重要的嵌入式操作系统:Windows CE,使学员在掌握嵌入式Linux的同时,也了解Windows CE的开发方法,拓展学员的知识面,丰富学员的知识结构。最后通过几个典型的企业全真案例,进一步巩固本期课程内容,使学员真正学以致用。

linux_内核移植方法及错误

出现问题: ## Starting application at 0x30008000 ... Uncompressing Linux............................................................. 解决方案: setenv bootargs console=ttySAC0,115200 mem=64M ;console明令在哪暂时还没解决??? setenv TCP cubic registered NET: Registered protocol family 1 NET: Registered protocol family 17 Root-NFS: No NFS server available, giving up. VFS: Unable to mount root fs via NFS, trying floppy. VFS: Cannot open root device "" or unknown-block(2,0) Please append a correct "root=" boot option Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0) 解决方法:把 08.05.11、<*> RAM disk support 09.27.07、<*> Compressed ROM file system support (cramfs) 1. 问题一 下载内核到flash中,运行到如下即停止没有下文: Uncompressing Linux……………………done,booting the kernel 卡在这里不动了 原因分析:可能是内核的启动参数传递时没有填写正确, 也可能是在linux内核中没对flash分区, 还有另一可能原因是在内核编译配置时没将串口驱动勾选。 解决办法: 如果是命令参数问题,则作如下修改:注释掉arch/arm/kernel/setup.c文件中的parse_tag_cmdline()函数中的strlcpy()函数,这样就可以使用默认的CONFIG_CMDLINE了,在.config文件中它被定义为"root=/dev/mtdblock2 ro init=/linuxrc console=ttySAC0,115200"(视具体情况而定),在内核配置文件的Boot options中填入也可。 如果是内核NAND flash分区的问题,则作如下修改:

嵌入式linux学习心得(多篇范文)

嵌入式linux学习心得 知识结构 1. 嵌入式处理器与裸机程序开发 2. linux系统管理 3. linux应用程序开发 4. linux驱动程序开发 5. linux内核开发与系统移植 一、处理器 1. arm处理器工作模式 2. arm系统寄存器 3. arm寻址方式 4. arm 汇编指令集 5. arm环境c语言编程 6. arm中断与异常 7. ads集成开发环境 8. 裸机程序开发(串口、lcd、时钟、led、按键……) 二、系统管理 1. linux定制安装 2. linux命令详解 3. samba、nfs、tftp、wireshark使用 4. shell编程 三、应用程序开发 1. gcc、gdb、makefile 2. 文件、时间编程 3. 多进程、多线程程序设计 4. 进程间通讯 5. 网络编程 6. qt图形化应用程序开发 7. android图形化应用程序开发 四、内核开发 1. linux内核配置与裁剪 2. linux内核模块开发 3. 根文件系统制作 4. 进程子系统 5. 内存子系统 6. proc文件系统 7. 系统调用 8. 内核定时器 9. 内核异常分析 五、驱动程序开发

1. 字符设备驱动程序 2. 总线、设备、驱动模型 3. 硬件访问技术 4. 中断处理 5. input设备驱动 6. platform驱动程序 7. pci、usb驱动程序 8. 网卡驱动程序 9. 触摸屏驱动程序 10. 串口驱动程序 学习顺序 1. 嵌入式处理器与裸机程序开发 2. linux系统管理 3. linux应用程序开发 4. linux内核开发基础 5. 嵌入式linux环境搭建 6. linux驱动程序开发 7. 深入学习linux内核 第二篇:嵌入式linux学习步骤 嵌入式linux学习步骤 作者:phantom 时间:XX-8-6 文章来源:来自网络 1、linux 基础 安装linux操作系统 linux文件系统 linux常用命令 linux启动过程详解熟悉linux服务能够独立安装linux操作系统能够熟练使用linux系统的基本命令认识linux系统的常用服务安装linux操作系统 linux基本命令实践设置linux环境变量定制linux的服务 shell 编程基础使用vi编辑文件使用emacs编辑文件使用其他编辑器 2、shell 编程基础 shell简介认识后台程序bash编程熟悉linux系统下的编辑环境熟悉linux下的各种shell 熟练进行shell编程熟悉vi基本操作熟悉emacs 的基本操作比较不同shell的区别编写一个测试服务器是否连通的shell

嵌入式Linux内核移植

1嵌入式Linux内核移植 姓名:成炼学号:081141 实验目的 l 了解Linux内核源代码的目录结构及各目录的相关内容 l 了解Linux内核各配置选项内容和作用 l 掌握Linux内核配置文件的作用 l 掌握Linux内核的编译过程 l 掌握将新增内核代码加入到Linux内核结构中的方法 实验指引 尽管目前Linux 2.6版本内核已经增加了很多对ARM体系甚至是S3C2410 CPU的支持,但仍然需要对内核作一些小的修改来适应我们的开发板,并且需要重新配置、编译和重新生成新的内核映像。本实验着重从NAND Flash分区到下载到开发板等一系列连贯的操作来进行嵌入式Linux内核的移植。本实验的内核版本为2.6.26。 1. NAND Flash分区 从Nand Flash启动时,S3C2410硬件会自动把Nand Flash前4K代码拷贝芯片内部RAM空间,CPU其实是从内部RAM开始执行代码的,所以vivi必须放到Nand Flash顶端。vivi 开始执行后将初始化硬件设备、建立内存空间映射表,为调用内核做好准备;然后把压缩的内核映像加载到SDRAM中;最后跳转到内核映像入口,启动内核。 内核MTD分区必须与vivi分区相一致。因为,vivi分区中的地址是引导程序、内核映像及文件系统下载到Nand Flash的真正地址;而内核启动时,内核并不是去读vivi分区中的地址,而是去读内核MTD分区设定的地址;所以,如果内核MTD分区与vivi分区不相同,很可能导致不能正常启动内核及读取文件系统。 1.1 vivi的重新分区 根据开发板的Nand Flash大小及开发用途确定新的vivi分区,如表1.1。 表1.1 vivi的分区信息表

嵌入式Linux的体系结构及其内核分析

嵌入式Linux的体系结构及其内核分析 1 嵌入式Linux系统的体系结构 1.1 嵌入式硬件 1.2 嵌入式软件 2 Linux操作系统内核 2.1 Linux内核的组成 2.2 Linux内核进程状态分析 2.3 嵌入式Linux系统内核的裁减和移植 1 嵌入式Linux系统的体系结构 由于Linux的独特优势,使越来越多的企业和科研机构把目光转向嵌入式Linux的开发和研究上。嵌入式Linux(Embeded Linux)是指对Linux经过小型化裁剪后,能够固化在容量只有几十万字节或几十亿字节的存储器芯片或单片机中,应用于特定嵌入式场合的专用Linux操作系统。嵌入式系统主要分为两大部分:嵌入式硬件和嵌入式软件。嵌入式硬件部分主要由嵌入式处理器、储存器、I/O端口和外围设备构成,嵌入式软件部分主要由嵌入式操作系统、设备驱动和嵌入式应用软件构成。嵌入式Linux系统有两层含义,狭义的嵌入式Linux系统指的是嵌入式Linux操作系统,广义的嵌入式Linux系统指的是基于嵌入式Linux操作系统构建的嵌入式系统。 嵌入式的体系结构如图1所示:

图 1 1.1 嵌入式硬件 嵌入式系统的核心是各种类型的嵌入式处理器,嵌入式处理器与通用处理器相比,具有很高的效率和可靠性,嵌入式系统趋于小型化。嵌入式处理器可以分为以下几类: ●嵌入式微处理器(Embedded Microprocessor Unit, EMU)。嵌入式微处理器目前主要有ARM, Power PC, MIPS,Am 186/88,386EX, 68000等系列,嵌入式微处理器的基础是通用计算机中的CPU。将微处理器装配在专门设计的电路板上,只保留和嵌入式应用有关的母板功能,这样可以大幅度减小系统体积和功耗。 ●嵌入式微控制器(Microcontroller Unit, MCU)。嵌入式微控制器目前主要有8051, P51XA, MCS-96/196/296, C166/167,MC68HC05/11/12/16等系列。嵌入式微控制器一般以某一种微处理器内核为核心,芯片内部集成ROM/EPROM、RAM、I/O、串口、脉宽调制输出、A/D、D/A,、Flash RAM等各种必要功能和外设。 ●DSP处理器(Digital Signal Processor, DSP) 。嵌入式DSP处理器比较有代表性的产品是TI的TMS320系列和Motorola的DSP56000系列。DSP处理器对系统结构和指令进行了特殊设计,使其适合十执行DSP算法,编译效率较高,指令执 行速度也较高,在数字滤波、FFT、频谱分析等方面得到了大量的应用。 ●嵌入式片上系统(System On Chip)。通用的SOC系列包括Infineon的

Camera驱动在Linux内核的移植解读

题_Camera驱动在Linux内核的移植 Camera驱动在Linux内核的移植Linux 3.0.8 内核的配置系统由以下3 个部分组成: > Makefile:分布在Linux 内核源代码中的Makefile,定义Linux 内核的编译规则 > 配置文件Kconfig:给用户提供配置选择的功能 > 配置工具:包括配置命令解释器(对配置脚本中使用的配置命令进行解释)和配置用户界面(提供字符界面和图形界面)。这些配置工具都是使用脚本语言编写的,如Tcl/TK、perl 等。 在Linux 内核中增加程序需要完成以下 3 项工作: > 1. 将编写的源代码复制到Linux 内核源代码的相应目录 > 2. 在目录的Kconfig 文件中增加新源代码对应项目的编译配置选项 > 3. 在目录的Makefile 文件中增加对新源代码的编译条目 1. 实例引导:S3C2440 处理器的RTC 与LED 驱动配置。 首先,在Linux/drivers/char 目录中包含了S3C2410 处理器的RTC 设备驱动源代码s3c2410-rtc.c。 而在该目录的Kconfig 文件中包含S3C2410_RTC 的配置项目: config S3C2410_RTC bool "S3C2410 RTC Driver" depends on ARCH_S3C2410 help RTC (Realtime Clock)driver for the clock inbuilt into the Samsung S3C2410. This can provide periodic interrupt rates from 1Hz to 64Hz for user programs, and wakeup from Alarm. 上述Kconfig 文件的这段脚本意味着只有在ARCH_S3C2410 项目被配置的情况下,才会出现S3C2410_RTC 配置项目,这个配置项目为布尔型(要么编译入内核,要么不编译,选择"Y" 或"N" ),菜单撒很难过显示的字符串为"S3C2410 RTC Driver","help" 后面的内容为帮助信息。 除了布尔型的配置项目外,还存在一种三态型(tristate)配置选项,它意味着要么编译入内核,要么编译为内核模块,选项为"Y"、"M” 或"N"。

嵌入式Linux系统开发教程参考答案_已修改

参考答案 第一章 一、填空题。 1、嵌入式系统主要融合了计算机软硬件技术、通信技术和微电子技术,它是将计算机直接嵌入到应用系统中,利用计算机的高速处理能力以实现某些特定的功能。 2、目前国内对嵌入式系统普遍认同的定义是:以应用为中心、以计算机技术为基础、软硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。 3、嵌入式系统一般由嵌入式计算机和执行部件组成,其中嵌入式计算机主要由四个部分组成,它们分别是:硬件层、中间层、系统软件层以及应用软件层。 4、嵌入式处理器目前主要有ARM、MIPS、Power PC、68K等,其中arm处理器有三大特点:体积小、低功耗、的成本和高性能,16/32位双指令集,全球合作伙伴众多。 5、常见的嵌入式操作系统有:Linux、Vxworks、WinCE、Palm、uc/OS-II和eCOS。 6、嵌入式系统开发的一般流程主要包括系统需求分析、体系结构设计、软硬件及机械系统设计、系统集成、系统测试,最后得到最终产品。 二、选择题 1、嵌入式系统中硬件层主要包含了嵌入式系统重要的硬件设备:、存储器(SDRAM、ROM等)、设备I/O接口等。(A) A、嵌入式处理器 B、嵌入式控制器 C、单片机 D、集成芯片 2、20世纪90年代以后,随着系统应用对实时性要求的提高,系统软件规模不断上升,实时核逐渐发展为,并作为一种软件平台逐步成为目前国际嵌入式系统的主流(D)A、分时多任务操作系统B、多任务操作系统 C、实时操作系统 D、实时多任务操作系统 3、由于其高可靠性,在美国的火星表面登陆的火星探测器上也使用的嵌入式操作系统是。(B) A、Palm B、VxWorks C、Linux D、WinCE 4、嵌入式系统设计过程中一般需要考虑的因素不包括:(D) A、性能 B、功耗 C、价格 D、大小 5、在嵌入式系统中比较流行的主流程序有:(A) A、Angel B、Blob C、Red Boot D、U-Boot

嵌入式操作系统ucos与linux比较

ucos2与linux的比较 随着嵌入式计算机技术的迅猛发展,嵌入式操作系统的应用领域逐步扩大,嵌入式计算机已经深入到人类日常生活和生产的各个角落。这次通过阅读相关资料,进一步加深了对嵌入式操作系统的了解,以下着重对ucos2和 linux进行比较,谈谈对嵌入式操作系统的理解。 首先linux和ucos都是免费使用,源代码公开的操作系统,可供用户自由进行裁剪,添加,移植。Linux是分时多任务多用户操作系统,ucos是实时多任务操作系统。两者都可运行于多种平台,适应性好,linux不仅可以运行于32位机,也可运行于64位机,单核,多核也同样适用。uCOS 2已经移植到近40多种处理器体系上,涵盖了从8位到64位各种CPU(包括DSP)。 内核 Ucos内核包括操作系统初始化、操作系统运行、中断进出的前导、时钟节拍、任务调度、事件处理等多部分,能够维持系统基本工作的部分都在这里。而linux内核包括进程管理,内存管理,设备管理,网络管理四部分。Ucos没有提供输入输出管理,文件系统,网络等服务。这些功能可由用户自行添加实现。Ucos内核支持抢占,即在进行内核服务函数时,允许被中断服务中断,并且中断结束后可以重新进行任务调度。Linux是非抢占式内核,实时性差。当进程运行在用户态时,可以被优先级更高的进程抢占,但当他进入核心态时,优先级再高也不能抢占它。 实时性 实时任务分为软实时和硬实时,硬实时对响应时间要求较高,且时间不被满足时会导致致命的错误,软实时随对响应时间有要求,但不是强制,不会给系统造成致命错误。Ucos是一个基于优先级调度的抢占式的实时内核,不仅内核支持抢占,同时支持任务的抢占式调度,优先级低的任务可以被高优先级任务抢占,也可被中断服务抢占。这就保证了系统可以尽可能快的对外部事件做出响应。通用Linux主要考虑调度的公平性和吞吐量等指标,尽管系统可以通过把实时事件赋予高优先级的方法来实时响应实时事件,但效果有限,对于响应时间要求比较高的硬实时任务,无法满足要求。但通过一些改进的措施,linux 的实时性可以弥补,例如:增加内核可抢占性,细化系统时钟粒度,改善屏蔽中断处理,改善调度算法等。 任务调度 任务调度主要是协调任务对计算机系统内资源(如内存、I/O设备、CPU)的争夺使用。任务有三个状态:等待态,就绪态,运行态。Ucos是完全基于任务优先级的抢占式调度。当出现具有更高优先级的任务处于就绪态时,进行任务的上下文切换,当前任务将停止运行,把cpu的控制权交给具有更高优先级的任务。Ucos中最多可调度64个任务,每个任务具有不同的优先级,当前运行的总是优先级最高的任务。Ucos无法进行同等优先级的任务调度。最高优先级任务的确定是通过建立就绪任务表来实现的。ucos中的每一个任务都有独立的堆栈空间,并有一个任务控制块TCB,任务控制块中包含了任务执行中的所有信息。Linux调度策略即优先级调度和时间片轮转调度。时间片轮转调度可进行同等优先级任务的调度,让这些任务依次运行一段时间,从而保证系统中同

相关主题
文本预览
相关文档 最新文档