linux arm 移植手册(分享)
arm-linux下usb转串口移植手册
arm-linux下usb转串口移植手册:讲述在嵌入式平台上,移植usb转串口的步骤:1、配置Kernel2、文件系统配置等。
Kernel:在配置内核时:加入usb转串口的支持、加入usb转串口器件的支持。
不同厂家的usb转串口工具需要的驱动可能不一样。
Device Drivers --->USB support --->--- USB port driversUSB Serial Converter support ---><*> USB Serial Converter support[*] USB Serial Console device support[*] USB Generic Serial drivert< > USB AIRcable Bluetooth Dongle Driver (EXPERIMENTAL)<*> USB FTDI Single Port Serial Driver (EXPERIMENTAL)本次实验才用的是FTDI的usb转串口工具在配置Kernel时,还可以加入对其他厂家的驱动支持。
文件系统:1、在/dev目录下建立设备文件/dev/ttyUSB0mknod /dev/ttyUSB0 c 188 02、在运行/sbin/getty登陆命令之前要先设置好:usb转串口对应端口的波特率、停止位等。
int usb_to_serial_init(viod){iUSBTORS232 = open( "/dev/ttyUSB0", O_RDWR);if (iUSBTORS232 iRS232 < 0){printf("Can't open device dev/ttyUSB00");return -1;}set_speed(iUSBTORS232 iRS232,BAUDRA TE);set_Parity(iUSBTORS232 iRS232,8,1,'n');close(iRS232);}3、在/etc/inittab 加入如下命令。
Linux内核移植到ARM
Linux内核移植到ARM在Linux内核移植到ARM处理器时,有一个问题不能忽视,那就是移植Boot-loader,Linux内核启动部分的代码需要判断从Boot-loader传递过来的寄存器值。
为什么需要Boot-loader呢?这与硬件本身的启动方式有关,有了Boot-loader可以方便系统的开发。
通过这段Boot-loader小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。
(1)Boot-loader所支持的CPU和嵌入式板每种不同的CPU体系结构都有不同的Boot-loader,有些Boot -loader 也支持多种体系结构的CPU,如U-Boot。
除了依赖于CPU 的体系结构外,Boot-loader实际上也依赖于具体的嵌入式板级设备的配置。
这也就是说,对于两块不同的嵌入式板而言,即使它们是基于同一种CPU而构建的,要想让运行在一块板子上的Boot-loader程序也能运行在另一块板子上,通常也都需要修改Boot-loader的源程序。
(2)Boot-loader的安装媒介系统加电或复位后,所有的CPU通常都从某个预先安排的地址上取指令。
比如,基于ARM内核的CPU在复位时通常都从地址Ox00000000取它的第一条指令。
而基于CPU构建的嵌入式系统通常都有某种类型的固态存储设备(比如:ROM、EEPROM或Hash等)被映射到这个预先安排的地址上。
因此在系统加电后,CPU将首先执行Boot-loader程序。
如图所示就是一个同时装有Boot-loader、内核的启动参数、内核映像和根文件系统映像的固态存储设备的典型空间分配结构图。
图固态存储设备的典型空间分配结构(3)用来控制Boot-loader的设备或机制主机和目标机之间一般通过串口建立连接,Boot-loader软件在执行时通常会通过串口来进行I/O,比如:输出打印信息到串口,从串口读取用户控制字符等。
嵌入式Linux在ARM上的移植
Linux在ARM上的移植摘要:本文是基于ARM的平台上进行嵌入式操作系统LINUX的移植,其中ARM选S3C2410。
文中首先对Linux操作系统内核进行了介绍,然后对系统引导程序(BootLoader)进行了设计,最后给出了Linux在ARM上的移植过程。
关键字:Linux、ARM、BootLoader、移植一、Linux操作系统内核Linux作为一种优秀的操作系统,近几年在嵌入式领域成为了极具潜力的嵌入式操作系统。
本文的主要内容是将Linux系统的内核移植到ARM(基于ARM9S3C2410)上。
Linux操作系统主要由内核、Shell、文件结构组成。
其中内核是系统的心脏,是运行程序和管理磁盘、打印机等硬件设备的核心程序。
(1)Linux内核结构Linux内核是整个Linux系统的灵魂,负责整个系统的内存管理、进程调度和文件管理。
Linux内核与大部分UNIX内核一样是单内核体系结构的,能够根据需要定制内核映像的尺寸,具有很大灵活性,不需要重新编译内核和引导就能检验新的内核组件,这个特性对于嵌入式而言是非常有好处的,方便用户构筑自己的个人内核。
Linux内核由5个主要的子系统组成:进程调度、内存管理、虚拟文件系统、网络接口和进程间通信。
(2)Linux内核代码组织结构本文将对LINUX进行内核移植,其内核代码分布如图所示。
下面分别对其进行说明:/arch目录包含了目前Linux支持的硬件结构,如i386、alpha、arm等的内核代码;/drivers目录包含了内核中所有的设备驱动程序;/fs目录包含了所有的文件系统的代码;/include目录包含了建立内核代码所需的大部分库文件,这个模块利用其它模块重建内核;/init目录包含了内核的初始化代码,内核从此处工作;/ipc目录包含了进程间通信代码;/kernel子目录包含了主内核代码;/mm目录包含所有独立于CPU体系结构的内存管理代码;/net目录包含了和网络相关的代码,如ipv4、ipv6等。
ARM-Linux移植
ARM-Linux内核移植之(一)——内核启动流程分析转载请注明来自于衡阳师范学院08电2 K-Style /ayangke,QQ:843308498 邮箱:yangkeemail@内核版本:2.6.22 为什么要采用这样一个较低的版本进行移植了,因为韦东山大牛说了,低版本的才能学到东西,越是高版本需要移植时做的工作量越少,学的东西越少。
内核启动分为三个阶段,第一是运行head.S文件和head-common.S,第三个阶段是允许第二是运行main.c文件对于ARM的处理器,内核第一个启动的文件是arc/arm/kernel下面的head.S文件。
当然arc/arm/boot/compress下面也有这个文件,这个文件和上面的文件略有不同,当要生成压缩的内核时zImage时,启动的是后者,后者与前者不同的时,它前面的代码是做自解压的,后面的代码都相同。
我们这里这分析arc/arm/kernel下面的head.S文件。
当head.S 所作的工作完成后它会跳到init/目录下跌的main.c的start_kernel函数开始执行。
第一阶段:首先截取部分head.S文件ENTRY(stext)msr cpsr_c,#PSR_F_BIT | PSR_I_BIT | SVC_MODE @ ensure svc mode@ andirqs disabledmrc p15,0, r9, c0, c0 @ get processor idbl __lookup_processor_type @ r5=procinfo r9=cpuidmovs r10,r5 @ invalidprocessor (r5=0)?beq __error_p @ yes, error 'p'bl __lookup_machine_type @ r5=machinfomovs r8,r5 @ invalidmachine (r5=0)?beq __error_a @ yes, error 'a'bl __create_page_tables/**The following calls CPU specific code in a position independent*manner. See arch/arm/mm/proc-*.S fordetails. r10 = base of*xxx_proc_info structure selected by __lookup_machine_type*above. On return, the CPU will be readyfor the MMU to be*turned on, and r0 will hold the CPU control register value.*/ldr r13,__switch_data @ address to jump toafter@ mmuhas been enabledadr lr,__enable_mmu @ return (PIC)address第一步,执行的是__lookup_processor_type,这个函数是检查处理器型号,它读取你的电路板的CPU型号与内核支持的处理器进行比较看是否能够处理。
基于ARM9嵌入式Linux内核的移植
一
ห้องสมุดไป่ตู้
I 在 相 关 地 方 增 加 修改根 目录中的 Ma ef 文件。这个 j“ CONFI ARCH— 3 4 0 = kfe l ¥ G— S C2 1 ”
Ma e l  ̄ kfe 件的任务有两个 : i3 产生v iu  ̄ i“ ml x n y”一 这个语句。 。 件 和 产 生 内 核模 块 。为 了达 到 此 目的 , 1 关键点: of 文件决定了m ncni cn g i euof g Ma ei 将递 归进入内核的各个子 目录中, 菜单的 内容 。把使 用的平 台加在需要的地 kf e l 分别调用位于这些子 目录中的 Ma ef 。 k f e j l 方,这样在配置Ln x时就能够选择是否 iu 打开最上 层目录下的 Ma ei 文 件, 1 k fl e 支持 你的 平台 了。 这个文件 中修改后 的内容如 下所示 : 1 4 . 改ac / r b o )修 r h a m/ o t目录下的 ( )指定 目标平台 :ARCH:= a m Ma ei 文件 1 r kfe l (2 ) 指 定 交 叉 编 译 器 : { 编译出来的内核是存放在 ac / r r am/ h
解压到 目标板的地址 :修改 b o 目录下的 ot 2. )根据电路设置T XT DD E A R { kfe Mael文件 ; i 修改 cm r s / kfe o pe e Mael sd i 因为 2. 1 4. 8版本 的内核还没有包含 1文 件 。
¥C 40 3 2 1X处理器 ,所以要手动增加下面内 } 5. ac /r / e e 目 ) 修改 r am kr l 录下的文 h n 容 『 件 i q¥C FG AR H_ 3 2 1)y f ((ON I_ C S C 40,) e
Linux系统在ARM上的内核移植资料
物理与电子工程学院《嵌入式系统设计》课程小论文课题题目 Linux系统在ARM上的内核移植系别物理与电子工程学院年级专业电子科学与技术学号学生姓名日期 2012.6.1目录摘要 (2)1.课题要求 (3)1.1 课题目的 (3)1.2 课题背景 (3)2. Linux系统及Linux内核以及移植简介 (4)2.1 Linux系统简介 (4)2.2 Linux内核简介 (4)2.3 内核移植简介 (6)2.3.1 移植的基本概念 (6)2.3.2 内核移植的准备 (6)3.内核移植 (7)3.1 内核移植基本流程 (7)3.2 内核配置 (7)3.2.1 修改Makefile (7)3.2.2 设置NAND Flash分区 (7)3.2.3 配置内核选项 (9)3.3 内核编译 (10)3.3.1 交叉编译环境的建立 (10)3.3.2 交叉编译 (11)3.4 内核下载 (11)4.技术实现问题 (13)5. 结束语 (14)参考文献 (15)设计性实验报告成绩:指导教师签名: (16)摘要随着计算机技术、通信技术以及Internet的飞速发展。
嵌入式系统已得到越来越广泛的应用。
与此同时,嵌入式系统的复杂性也在不断增加,嵌入式操作系统已经成为其中最重要的组成部分。
本文是基于ARM 的平台上进行嵌入式操作系统LINUX 的移植,其中ARM 选用S3C2410。
文中首先对内核移植的背景以及Linux 操作系统内核进行了介绍, 然后对移植的步骤及要点做了详细的介绍, 最后实现编译的过程。
操作系统移植是嵌人式系统开发的前提和基础,对嵌入式系统的开发具有重要意义1.课题要求1.1 课题目的1. 了解移植的基本概念;2. 熟悉Linux内核的配置过程;3. 熟悉Linux内核的编译过程;4. 了解根文件系统的作用;5. 学会BusyBox工具的使用;6. 学会构建Cramfs文件系统。
1.2 课题背景Linux内核发展速度迅猛,是目前市场上唯一可以挑战Windows 的操作系统。
ARM开发教程之ARM Linux系统移植步骤
千锋3G嵌入式移动互联网技术研发中心 千锋3G嵌入式移动互联网技术研发中心 3G
ARM开发教程之LINUX简介 LINUX简介 LINUX
在众多嵌入式操作系统中,Linux目前发展最快、应用最为 广泛[1]。性能优良、源码开放的Linux具有体积小、内核可 裁减、网络功能完善、可移 植性强等诸多优点,非常适合 作为嵌入式操作系统。一个最基本的Linux操作系统应该包 括:引导程序、内核与根文件系统三部分。 与Linux2.4内核相比,2.6内核吸收了最新的技术,在 性能、可测量性、器件支持和可用性方面有了大幅度提高; 支持更多的体系结构、处理器、总线、接口和设备;标准 化了内部接口;简化了扩展或添加新设备的步骤等。 本文着重介绍如何制作一个基于linux-2.6.19内核的小 型Linux操作系统,并将它移植到S3C2410开放板上。内容 包括交叉编译环境的建立,引导程序、2.6.19内核、根文 件系统的修改、配置、编译、移植等。
千锋3G嵌入式移动互联网技术研发中心 千锋3G嵌入式移动互联网技术研发中心 3G
ARM开式移动互联网技术研发中心 千锋3G嵌入式移动互联网技术研发中心 3G
org内核吸收了最新的技术在?千锋3g嵌入式移动互联网技术研发中心arm开发教程之系统的制作移植建立交叉编译环境?要移植开发小型linux系统首先要在安装了redhat9或更高版本linux操作系统的主机上配置交叉开发环境
千锋3G嵌入式移动互联网技术研发中心 千锋3G嵌入式移动互联网技术研发中心 3G
千锋3G嵌入式移动互联网技术研发中心 千锋3G嵌入式移动互联网技术研发中心 3G
ARM开发教程之根文件系统 根文件系统
Linux系统中的文件和设备是通过文件系统来组织的。 文件系统的存在使得数据和设备可以被有效而透明地 存取访问。一个linux的最简根文件系统应该包括支持 linux系统正常运行的基本内容,包括系统使用的软件 和库,以及所有用来为用户提供基本支持的架构和指 令。 在根文件目录rootfs下建立bin、dev、etc、lib、 proc、sbin、root、tmp等一系列必备的目录,把所需 的配置文件、动态 函数库放到相应的目录。采用 BusyBox是缩小根文件系统的好办法。BusyBox以很小 的体积集成了最常用的linux命令和应用程序,大大简 化了制 作linux根文件系统的过程。
linux移植过程手册
一、移植环境主机:VMWare-Ubuntu开发板:TOP6410, Kernel:2.6.36.2编译器:arm-linux-gcc-4.3.2.tgz二、源码获得内核源码到/下载;三、移植步骤:1.将Linux2.6.34.2内核源码放到工作目录文件夹下,并解压。
#tar xzvf linux2.6.36.2.tar.gz –c /#pwd/# cd linux2.6.36.22. 修改内核源码根目录下的Makefile文件(CROSS_COMPILE =的值因个人情况而定,其他可以照做,蓝色部分为修改部分。
)#geditMakefile......#SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \# -e s/arm.*/arm/ -e s/sa110/arm/ \# -e s/s390x/s390/ -e s/parisc64/parisc/ \# -e s/ppc.*/powerpc/ -e s/mips.*/mips/ )......#ARCH ?= $(SUBARCH)#CROSS_COMPILE ?=ARCH = armCROSS_COMPILE = /usr/local/arm/usr/local/arm/4.3.2/bin/arm-none-linux- gnueabi-3添加NandFlash分区信息.修改arch/arm/mach-s3c64xx/mach-smdk6410.c文件,添加Nand Flash的分区信息和Nand Flash的硬件信息。
(蓝色字体为添加部分)#pwd#gedit mach-smdk6410.c //add here 注意:此处的nandflash分区信息是内核设置,由于此处要用到uboot一致,所以分区信息也要按uboot的来添加头文件#include <plat/nand.h>#include <linux/mtd/partitions.h>#include <mtd/mtd-abi.h>#include <asm/mach/flash.h>structmtd_partition s3c_partition_info[] = {{.name = "Bootloader",.offset = 0,.size = (256*SZ_1K),.mask_flags =MTD_CAP_NANDFLASH,},{.name = "Kernel",.offset = (256*SZ_1K),.size = (4*SZ_1M) - (256*SZ_1K),.mask_flags = MTD_CAP_NANDFLASH,},#if defined (CONFIG_SPLIT_ROOT_FILESYSTEM){.name = "Rootfs",.offset = (4*SZ_1M),.size = (80*SZ_1M),//},#endif{.name = "File System",.offset = MTDPART_OFS_APPEND,.size = MTDPART_SIZ_FULL,}};staticstruct s3c2410_nand_set s3c_nandset[]={[0]= {.name ="s3c24xx-nand",.nr_chips = 1,.nr_partitions =ARRAY_SIZE(s3c_partition_info),.partitions =s3c_partition_info,}};staticstruct s3c2410_platform_nand s3c_platform={.tacls =25,.twrph0 =55,.sets = &s3c_nandset,.nr_sets =ARRAY_SIZE(s3c_nandset),};//add here…static structplatform_device *smdk6410_devices[] __initdata = { #ifdef CONFIG_SMDK6410_SD_CH0&s3c_device_hsmmc0,#endif#ifdef CONFIG_SMDK6410_SD_CH1&s3c_device_hsmmc1,#endif&s3c_device_i2c0,&s3c_device_i2c1,&s3c_device_fb,&s3c_device_ohci,&s3c_device_usb_hsotg,&s3c64xx_device_iisv4,//add here&s3c_device_nand,//add here…}static void __init smdk6410_map_io(void){u32tmp;//add heres3c_device_ = "s3c6410-nand";//add here……}static void __init smdk6410_machine_init(void){u32 cs1;s3c_i2c0_set_platdata(NULL);s3c_i2c1_set_platdata(NULL);s3c_fb_set_platdata(&smdk6410_lcd_pdata);//add heres3c_nand_set_platdata(&s3c_platform);////add here…}5.配置内核。
linux arm移植命令
linux arm移植命令1. 什么是ARMARM(Advanced RISC Machine)是一种基于RISC(Reduced Instruction Set Computer)架构的处理器设计,常被用于嵌入式系统领域。
由于其低功耗、高性能和成本效益等优势,ARM架构广泛应用于移动设备、物联网和家庭娱乐等领域。
2. 为什么需要ARM移植移植指的是将某个操作系统或软件移植到不同的硬件平台上。
ARM移植即将Linux操作系统移植到ARM架构的处理器上。
由于ARM处理器与传统的x86处理器架构有所不同,因此需要对Linux进行移植以在ARM设备上运行。
3. ARM移植命令步骤ARM移植涉及多个步骤,以下是常见的移植命令及其说明:## 3.1. 配置内核源码### 3.1.1. make menuconfig执行`make menuconfig`命令可进入内核配置界面,通过界面可进行内核配置,包括硬件支持、设备驱动等。
### 3.1.2. make oldconfig执行`make oldconfig`命令可根据当前配置文件生成一个新的配置文件,用于更新配置文件中的新选项。
## 3.2. 编译内核执行`make`命令即可进行内核的编译,编译过程可能会持续一段时间。
## 3.3. 生成根文件系统根文件系统是指Linux运行时所需要的文件及目录结构。
可以通过`buildroot`等工具生成根文件系统。
## 3.4. 烧录内核及根文件系统编译完成后,将生成的内核镜像和根文件系统烧录到ARM设备的存储介质中,例如SD卡或eMMC存储器。
## 3.5. 启动ARM设备将存储介质插入到ARM设备中,通过开发板或串口终端连接到设备,随后可以启动ARM设备并进入Linux操作系统。
4. ARM移植的挑战和注意事项ARM移植相对复杂且涉及多方面的技术,以下是一些挑战和注意事项:- 硬件驱动:需要确保所选的硬件能与Linux内核进行良好的兼容性,并确保相关的设备驱动可用。
linux下把某些开源库移植到arm开发板的基本流程
linux下把某些开源库移植到arm开发板的基本流程
将某一开源库移植到ARM开发板的基本流程如下:
1. 了解ARM开发板的硬件平台参数(例如CPU架构、内存大小等)以及操作系统类型和版本(例如Linux)。
2. 下载所需的编译工具链,包括ARM交叉编译器、交叉编译时所需的库文件等。
3. 下载需要移植的开源库源代码。
4. 配置交叉编译器,将其与ARM开发板的硬件平台参数进行匹配。
5. 编译并链接代码,生成ARM平台可执行文件。
6. 将编译好的可执行文件拷贝到ARM开发板上进行测试,并根据需要进行调试和修改。
7. 重复上述步骤,直到移植的开源库能够在ARM开发板上正常运行。
需要注意的是,在移植过程中还需要考虑一些特殊情况,例如可能需
要修改源代码中的一些与硬件平台相关的部分,以确保其能够正确地运行在ARM开发板上。
ARM-Linux内核移植之(二)——Linux2.6.22内核移植
ARM-Linux内核移植之(二)——Linux2.6.22内核移植Y-Kee转载请注明来自于衡阳师范学院08电2 Y-Kee /ayangke, QQ:843308498平台:mini2440 交叉工具链:arm-linux-gcc-4.3.2一、内核移植基本知识移植内核也叫构建BSP(board supprot packet)。
BSP的作用有两个:一是为内核运行提供底层支持,二是屏蔽与板相关的细节。
BSP的构建分三个层次1、体系结构层次对一些体系结提供linux内核支持,比如说ARM,X86等芯片。
这一类工作一般在arc/xxx/下面额除了palt-xxx和mach-xxx目录的其他目录完成。
2、SOC层次对一些公司提供的SOC微处理器提供linux内核支持,比如说三星公司的S3C2440。
这一类工作一般在arch/xxx/plat-xxxx arch/xxx/mach-xxxx目录下完成。
我们可以看到在arch/arm/目录下同时有plat-s3c24xx和mach-s3c2440两个目录,这样做是因为plat-s3c24xx 目录下存放了所有s3c24系列相同的代码,mach-s3c2440则只存放了与S3C2440有关的代码。
2,板级层次这是我们一般的菜鸟要做的,上面两个层次一般有芯片公司的大牛完成了,但是不同的电路板的板级层次则需要由我们菜鸟完成的。
这一类工作主要在mach-xxxx/目录下面的板文件完成,比如说mach-s3c2440/smdk-s3c2440.c这个S3C2440标准板文件。
很多文档很多书籍都都直接在这个文件里面进行修改,这样是不对的,对于不同的电路板应该建立不同的板文件,比如说我的是mini2440,就应该建立一个smdk-mini2440.c文件或者mach-mini2440.c 文件在mach-s3c2440下面。
如果直接在里面修改是非常不规范的做法,这样不是在移植内核,这样是在破坏内核!(这一句是宋宝华说的)。
基于ARM9的LINUX操作系统移植
基于ARM9的LINUX操作系统移植移植ARM9的LINUX操作系统是一项复杂的任务,需要充分了解ARM9架构和LINUX操作系统以及相关工具链。
以下是一个基本的指南,用于说明如何进行ARM9的LINUX操作系统移植。
1.ARM9架构的简介ARM9是ARM处理器系列中的一种32位RISC架构芯片,广泛应用于嵌入式系统和移动设备中。
ARM9具有较高的性能和低功耗特性,对于运行Linux操作系统非常适合。
ARM9处理器通常由ARM920T和ARM926EJ-S 两种型号组成。
2.LINUX操作系统的简介LINUX是一个开源的类UNIX操作系统内核,广泛应用于嵌入式系统和服务器领域,并且也非常适合ARM架构设备。
LINUX操作系统提供了丰富的功能和各种驱动程序,可以满足嵌入式系统的需求。
3.移植准备在进行LINUX操作系统移植之前,需要先准备好以下工具和材料:-ARM9开发板:用于将LINUX操作系统移植到ARM9架构上。
-交叉编译工具链:用于在主机上编译ARM9上的LINUX操作系统。
4.移植步骤移植LINUX操作系统到ARM9架构上比较复杂,一般需要以下步骤:-了解ARM9的硬件特性和寄存器体系结构。
- 配置LINUX内核:根据ARM9的硬件特性和功能需求,对内核进行配置。
可以通过make menuconfig或make xconfig命令进行配置。
-编译内核:使用交叉编译工具链,将LINUX内核编译为ARM9可执行的二进制文件。
-烧录内核映像文件:将编译好的内核映像文件烧录到ARM9开发板上的存储介质中。
-启动LINUX操作系统:通过引导加载程序启动LINUX内核,完成ARM9上的LINUX操作系统移植。
5.设备驱动程序移植LINUX操作系统提供了各种设备驱动程序,但是在ARM9架构上可能需要根据具体硬件进行相应的移植。
需要注意的是,ARM9的LINUX驱动程序必须与硬件兼容才能正常工作。
移植设备驱动程序的步骤包括:-阅读设备的硬件文档,了解设备的寄存器操作和特性。
armlinux移植文档
移植文档1、嵌入式linux 简介LINUX 是一个类似UNIX 的操作系统,其代码是完全重新开放的,内核功能强大,实现简洁。
它提供了类似UNIX 的编程接口和系统调用,可以方便的将UNIX系统上的应用程序,移植到Linux上运行。
Linux具有一下特点:1.可移植性:Linux内核源代码是用C语言编写的,可以运行到各种平台。
2.支持多种处理器体系结构:Linux内核能够支持的处理器要求是32位处理器,有没有MMU都可以。
没有MMU的处理器只有uClinux支持。
Linux-2.6内核支持的绝大多数都是带MMU的。
3.开放源代码的优势:Linux内核是开放源代码的,也就是说,用户可以免费获取,修改linux源码。
庞大的linux 社区和内核源代码工程,有很多各种各样的驱动程序和应用程序可以利用。
开发者可以免费得到社区的贡献、支持。
众所周知,Linux在嵌入式系统中的应用已经非常普遍。
为了进一步促进这方面的应用,在Linux 2.6中,引入了很多非常有利于嵌入式应用的功能。
这些新功能包括实时性能的增强、更方便的移植性、对大容量内存的支持、支持微控制器和I/O系统的改进等。
2、linux-2.6内核的新特征1.改进了响应时间在2.6内核以前,要想让Linux获得更好的响应能力,就需要一些特殊的补丁。
通常情况下,需要用户从厂商处购买补丁来改进中断性能和调度反应时间。
如今,2.6内核把这些改进加入到了主流的内核当中,因此无需再对其进行特殊的配置。
2.抢占式内核Linux 2.6内核在一定程度上使用了可抢占的模式。
因此,在一些时效性比较强的事件中,Linux 2.6要比2.4具有更好的响应能力。
当然了,它实际上并不是一个真正的RTOS,但是与以前的内核相比较,“停顿”的感觉要少得多。
3.高效的调度程序在2.6版本中,进程调度经过重新编写,去掉了以前版本中效率不高的算法。
调度程序每次不再扫描所有的任务,而是在一个任务变成就绪状态时将其放到一个名为“当前队列”的队列之中。
Linux移植手册
LINUX移植手册for AT91 SAM9261目录一.交叉编译环境的建立 (2)二. Linux内核下载编译 (2)1.下载合适的linux内核,这里以2.6.27为例 (2)2.下载针对AT91的linux补丁 (2)3.配置编译linux 内核 (2)4.修改Makefile (3)5.make ARCH=arm oldconfig (3)6. 编辑默认的配置 (3)7. 修改nand flash 分区信息 (3)8.编译内核 (4)9.生成可烧写的映像文件 (4)三.tftp文件传输软件的安装 (4)1.下载tftp软件包tftp,tftpd和openbsd-inetd (5)2.在跟目录下创建文件夹tftpboot 并且修改其权限。
(5)3.修改/etc/inetd.conf文件如下样子 (5)4.修改/etc/xinetd.d/tftp 如下样子(如果没有就创建) (5)5.修改/etc/default/tftpd-hp文件如下(如果没有就创建) (5)6.启动tftp服务 (5)7.测试tftp服务 (6)四.JFFS2根文件系统的制作 (6)1.编译并生成根文件系统文件 (6)2.准备制作jffs2文件系统的所有文件 (7)3.制作jffs2文件系统 (8)五. NFS根文件系统制作 (8)1.选择交叉编译工具和busybox (8)2配置busybox (9)3建立根文件系统目录树 (9)六.烧写开发板 (11)1 烧写U-boot文件 (11)2 烧写内核映像文件 (11)3烧写根文件系统 (11)4挂载基于nfs文件系统 (12)本移植指南主要是建立在Atmel Sam9261开发板上。
这套开发板有一个4M 的Norflash,一个64M的Nand flash以及64M的SDRAM。
详细请参考AT91SAM9261中文数据手册。
Linux主机用的是Ubuntu 10.04版本,移植的Linux 内核版本为2.6.27, 移植过程中一直以root用户操作,挂载网络文件系统是在Fedroa操作系统下进行的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Linux系统移植目 录第一部分 前言 (8)1 硬件环境 (8)1.1主机硬件环境 (8)1.2 目标板硬件环境 (8)1.3工具介绍 (8)2软件环境 (8)2.1主机软件环境 (8)2.1.1 Windows 操作系统 (8)2.1.2 Linux操作系统 (8)2.1.3 目标板最后运行的环境 (9)2.2 Linux下工作用户及环境 (9)2.2.1 交叉工具的安装 (9)2.2.2 uboot移植工作目录 (9)2.2.3 内核及应用程序移植工作 (9)2.3 配置系统服务 (10)2.3.1 tftp服务器的配置 (10)2.4 工具使用 (12)2.4.1 minicom的使用 (12)3 作者介绍 (13)3.1 策划, 组织, 指导, 发布者 (13)3.2 ADS bootloader部分 (13)3.3 交叉工具部分 (13)3.4 uboot部分 (13)3.5 内核部分 (13)3.6 应用程序部分 (13)3.7 网卡驱动部分 (13)3.8 Nand Flash 驱动部分 (13)第二部分 系统启动bootloader的编写(ADS) (14)1 工具介绍 (14)1.1 ADS 命令行命令介绍 (14)1.1.1 armasm (14)1.1.2 armcc, armcpp (14)1.1.3 armlink (14)2 基本原理 (15)2.1 可执行文件组成及内存映射 (15)2.1.1 可执行文件的组成 (15)2.1.3 启动过程的汇编部分 (17)2.1.4 启动过程的C部分 (17)3 AXD的使用以及源代码说明 (18)3.1 源代码说明 (18)3.1.1 汇编源代码说明 (18)3.1.2 C语言源代码说明 (23)3.1.3 源代码下载 (23)3.2 AXD的使用 (23)3.2.1 配置仿真器 (23)3.2.2 启动AXD 配置开发板 (23)第三部分 GNU交叉工具链 (25)1 设置环境变量,准备源码及相关补丁 (25)1.1 设置环境变量 (25)1. 2 准备源码包 (25)1.2.1 binuils (25)1.2.2 gcc (25)1.2.3 glibc (25)1.2.4 linux kernel (26)1.3 准备补丁 (26)1.3.1 ioperm.c.diff (26)1.3.2 flow.c.diff (26)1.3.3 tlinux.diff (26)1.4 编译 GNU binutils (26)1.5 准备内核头文件 (26)1.5.1 使用当前平台的gcc编译内核头文件 (26)1.5.2 复制内核头文件 (27)1.6 译编glibc头文件 (27)1.7 编译gcc第一阶段 (27)1.8 编译完整的glibc (27)1.9 编译完整的gcc (28)2 GNU交叉工具链的下载 (28)2.1 ARM官方网站 (28)2.2 本文档提供的下载 (28)3 GNU交叉工具链的介绍与使用 (29)3.1 常用工具介绍 (29)3.2.1 armlinuxgcc的使用 (29)3.2.2 armlinuxar 和 armlinuxranlib的使用 (30)3.2.3 armlinuxobjdump的使用 (30)3.2.4 armlinuxreadelf的使用 (31)3.2.6 armlinuxcopydump的使用 (32)4 ARM GNU常用汇编语言介绍 (32)4.2 ARM GNU专有符号 (33)4.3 操作码 (33)5 可执行生成说明 (33)5.1 lds文件说明 (33)5.1.1 主要符号说明 (33)5.1.2 段定义说明 (34)第四部分 uboot的移植 (35)1 uboot的介绍及系统结构 (35)1.1 uboot介绍 (35)1.2 获取uboot (35)1.3 uboot体系结构 (35)1.3.1 uboot目录结构 (35)2 uboot的启动过程及工作原理 (36)2.1 启动模式介绍 (36)2.2 阶段1介绍 (36)2.2.1 定义入口 (36)2.2.2 设置异常向量 (37)2.2.3 设置CPU的模式为SVC模式 (37)2.2.4 关闭看门狗 (37)2.2.5 禁掉所有中断 (37)2.2.6 设置以CPU的频率 (37)2.2.7 设置CP15 (37)2.2.8 配置内存区控制寄存器 (38)2.2.9 安装UBOOT使的栈空间 (38)2.2.10 BSS段清0 (38)2.2.11 搬移Nand Flash代码 (39)2.2.12 进入C代码部分 (39)2.3 阶段2的C语言代码部分 (39)2.3.1调用一系列的初始化函数 (39)2.3.2 初始化网络设备 (41)2.3.3 进入主UBOOT命令行 (41)2.4 代码搬运 (41)3 uboot的移植过程 (42)3.1 环境 (42)3.2 步骤 (42)3.2.1 修改Makefile (42)3.2.2 在board子目录中建立crane2410 (42)3.2.3 在include/configs/中建立配置头文件 (42)3.2.4 指定交叉编译工具的路径 (42)3.2.5 测试编译能否成功 (42)3.2.6 修改lowlevel_init.S文件 (43)3.2.9 把uboot烧入flash (45)4 UBOOT命令的使用 (46)4.1 UBOOT命令的介绍 (46)4.1.1 获得帮助信息 (46)4.2 常用命令使用说明 (47)4.2.1 askenv(F) (47)4.2.2 autoscr (47)4.2.3 base (47)4.2.4 bdinfo (47)4.2.5 bootp (47)4.2.8 tftp(tftpboot) (48)4.2.9 bootm (48)4.2.10 go (48)4.2.11 cmp (48)4.2.12 coninfo (48)4.2.13 cp (48)4.2.14 date (49)4.2.15 erase(F) (49)4.2.16 flinfo(F) (49)4.2.17 iminfo (49)4.2.18 loadb (49)4.2.19 md (49)4.2.20 mm (50)4.2.21 mtest (50)4.2.22 mw (50)4.2.23 nm (50)4.2.24 printenv (50)4.2.25 ping (51)4.2.26 reset (51)4.2.27 run (51)4.2.28 saveenv(F) (51)4.2.29 setenv (51)4.2.30 sleep (51)4.2.31 version (51)4.2.32 nand info (51)4.2.33 nand device <n> (51)4.2.34 nand bad (51)4.2.35 nand read (52)4.2.36 nand erease (52)4.2.37 nand write (52)5 参考资料 (53)第五部分 linux 2.6内核的移植 (53)1 内核移植过程 (53)1.1 下载linux内核 (53)1.2 修改Makefile (53)1.3 设置flash分区 (54)1.3.1指明分区信息 (54)1.3.2 指定启动时初始化 (56)1.3.3 禁止Flash ECC校验 (56)1.4 配置内核 (56)1.4.1 支持启动时挂载devfs (56)1.4.2配置内核产生.config文件 (57)1.4.3编译内核 (58)1.4.4 下载zImage到开发板 (58)2 创建uImage (61)2.1 相关技术背景介绍 (61)2.2 在内核中创建uImage的方法 (61)2.2.1 获取mkimage工具 (61)2.2.2 修改内核的Makefile文件 (61)3追加实验记录 (62)3.1移植linux2.6.15.7 (62)3.2移植linux2.6.16.21 (62)3.3 移植linux2.6.17 (62)4 参考资料 (62)第六部分 应用程序的移植 (63)1构造目标板的根目录及文件系统 (63)1.1 建立一个目标板的空根目录 (63)1.2 在my_rootfs中建立Linux目录树 (63)1.3 创建linuxrc文件 (63)2 移植Busybox (64)2.1 下载busybox (64)2.3 编译并安装Busybox (65)3 移植TinyLogin (66)3.1 下载 (66)3.2 修改tinyLogin的Makefile (66)3.3 编译并安装 (66)4 相关配置文件的创建 (66)4.1 创建帐号及密码文件 (66)4.2 创建profile文件 (67)4.5 创建inetd.conf配置文件 (67)5 移植inetd (67)5.1 inetd的选择及获取 (67)5.1.1 获取inetd (67)5.2 编译inetd (67)5.2.1 修改configure文件 (67)5.2.2 编译 (68)5.3 配置inetd (68)5.3.1 拷贝inetd到根文件系统的usr/sbin目录中 (68)6 移植thttpd Web服务器 (69)6.1 下载 (69)6.2 编译thttpd (69)6.3 配置 (69)6.3.1 拷贝thttpd二进制可执行文件到根文件系统/usr/sbin/目录中 (69)6.3.2 修改thttpd配置文件 (69)6.3.3 转移到根文件系统目录,创建相应的文件 (69)7 建立根目录文件系统包 (70)7.1 建立CRAMFS包 (70)7.1.1 下载cramfs工具 (70)7.1.2 制作cramfs包 (70)7.1.3 写cramfs包到Nand Flash (70)8 参考资料 (70)第七部分 Nand flash驱动的编写与移植 (71)1 Nand flash工作原理 (71)1.1 Nand flash芯片工作原理 (71)1.1.1 芯片内部存储布局及存储操作特点 (71)1.1.2 重要芯片引脚功能 (71)1.1.3 寻址方式 (71)1.1.4 Nand flash主要内设命令详细介绍 (72)1.2 Nand Flash 控制器工作原理 (72)1.2.1 Nand Flash控制器特性 (72)1.2.2 Nand Flash控制器工作原理 (72)1.3 Nand flash 控制器中特殊功能寄存器详细介绍 (72)1.4 Nand Flash 控制器中的硬件ECC介绍 (73)1.4.1 ECC产生方法 (73)1.4.2 ECC生成器工作过程 (74)1.4.3 ECC的运用 (74)2 在ADS下flash烧写程序 (74)2.1 ADS下flash烧写程序原理及结构 (74)2.2 第三层实现说明 (74)2.1.1 特殊功能寄存器定义 (74)2.1.2 操作的函数实现 (74)2.3 第二层实现说明 (75)2.3.1 Nand Flash 初始化 (75)2.3.3 获取Nand flash ID (75)2.3.4 Nand flash写入 (76)2.3.5 Nand flash读取 (77)2.3.6 Nand flash标记坏块 (78)2.3.7 Nand Flash检查坏块 (79)2.3.8 擦除指定块中数据 (79)2.4 第一层的实现 (80)3 在UBOOT对Nand Flash的支持 (82)3.1 UBOOT对从Nand Flash启动的支持 (82)3.1.1 从Nand Flash启动UBOOT的基本原理 (82)3.1.2 支持Nand Flash启动代码说明 (82)3.2 UBOOT对Nand Flash命令的支持 (84)3.2.1 主要数据结构介绍 (84)3.2.2 支持的命令函数说明 (85)4 在Linux对Nand Flash的支持 (87)4.1 Linux下Nand Flash调用关系 (87)4.1.1 Nand Flash设备添加时数据结构包含关系 (87)4.1.2 Nand Flash设备注册时数据结构包含关系 (87)4.2 Linux下Nand Flash驱动主要数据结构说明 (88)4.2.1 s3c2410专有数据结构 (88)4.2.2 Linux 通用数据结构说明 (89)4.3.1 注册driver_register (94)4.3.2 探测设备probe (94)4.3.3 初始化Nand Flash控制器 (94)4.3.4 移除设备 (94)4.3.5 Nand Flash芯片初始化 (94)4.3.6 读Nand Flash (95)4.3.7 写Nand Flash (95)第八部分 Cs8900a网卡驱动的编写与移植 (95)1 Cs8900a工作原理 (95)2 在ADS下cs8900a的实现 (95)2.1 在cs8900a下实现的ping 工具 (95)3 在uboot下cs8900a的支持 (96)3.1 uboot下cs8900a的驱动介绍 (96)3.2 uboot下cs8900a的移植说明 (96)4 在linux下cs8900a驱动的编写与移植 (96)4.1 Linux下cs8900a的驱动说明 (96)4.2 Linux 下cs8900a的移植说明 (96)4.2.1 为cs8900a建立编译菜单 (96)4.2.2 修改S3C2410相关信息 (97)序该文档的目的是总结我们在工作中的一些经验,并把它们分享给喜欢ARM和Linux的朋友, 如有错误之处,请大家多多指点. 同样, 我们也希望更多人能把自己的工作经验和体会加入该文档,让大家共同进步.该文档是一份交流性文档, 只供个人学习与交流,不允许公司和企业用于商业行为.第一部分 前言1 硬件环境1.1主机硬件环境开发机:Pentium-4 CPU内存: 512MB硬盘: 60GB1.2 目标板硬件环境CPU: S3C2410SDRAM: HY57V561620Nand flash: K9F1208U0B(64MB)以太网芯片:CS8900A (10M/100MB)1.3工具介绍仿真器:Dragon-ICE电缆:串口线,并口线2软件环境2.1主机软件环境2.1.1 Windows操作系统ADS编译工具:ADS1.2仿真器软件: Dragon-ICE daemon程序2.1.2 Linux操作系统GNU交叉编译工具:2.95.3:作用:编译u-boot3.3.2, 3.4.4:tree工具:作用:查看文件目录树下载:从ftp:///linux/tree/下载编译2.1.3 目标板最后运行的环境启动程序:u-boot-1.1.4内核:linux-2.6.14.1应用程序:1. busybox-1.1.32. TinyLogin-1.43. Thttpd-2.252.2 Linux下工作用户及环境2.2.1 交叉工具的安装工具链的编译过程请参考第三部分.1. 下载交叉工具2.95.3 下载地址:ftp:///pub/armlinux/toolchain/cross-2.95.3.tar.bz23.3.4 下载地址:2. 编译交叉工具[root@localhost ~]mkdir /usr/local/arm[root@localhost ~]cd /usr/local/arm把cross-2.95.2.tar.bz2, cross-3.4.4.tar.gz 拷贝到/usr/local/arm目录中。