Linux系统在ARM上的内核移植资料
- 格式:doc
- 大小:241.00 KB
- 文档页数:17
2020年第8期信息与电脑China Computer & Communication软件开发与应用基于嵌入式ARM9的Linux 系统移植的研究和实现冯宁波 周 剑(苏州长风航空电子有限公司,江苏 苏州 215151)摘 要:笔者以ARM9处理器为硬件,对嵌入式系统展开分析,并对安装到嵌入式ARM9芯片开发板上的Linux 系统移植进行研究。
Linux 系统移植步骤如下:首先初始化随机存取存储器,设置堆栈,引导加载程序移植;然后下载Linux 内核,修改Makefile 文件,设计交叉编译环境;最后依据内核启动过程,指定启动初始值,控制后台,并执行制作菜单配置命令。
关键词:嵌入式ARM9;Linux 系统;移植;内核中图分类号:TP311.54;TP316.81 文献标识码:A 文章编号:1003-9767(2020)08-078-02Research and Implementation of Linux System Migration Based on EmbeddedARM9Feng Ningbo, Zhou Jian(Suzhou Changfeng Avionics Co., Ltd., Suzhou Jiangsu 215151, China)Abstract: The author takes ARM9 processor as hardware, analyzes the embedded system, and studies the Linux systemporting installed on the embedded ARM9 chip development board. The steps of Linux system porting are as follows: first, initialize random access memory, set stack, boot loader porting; then download Linux kernel, modify makefile file, and design cross compiling environment; finally, according to the kernel startup process, specify the initial startup value, control the background, and execute thecommand of making menu configuration.Key words: embedded ARM9; Linux system; transplantation; kernel0 引言微电子技术快速发展使计算机技术支持下的嵌入式系统得到广泛应用,该系统因软硬件可裁剪、使用性能良好,受到人们青睐[1]。
基于ARM平台的Linux内核移植中图分类号:tp 文献标识码:a 文章编号:1007-0745(2011)10-0204-01摘要:linux是一个可移植性非常好的操作系统,它广泛支持了许多不同体系结构的计算机。
可移植性是指代码从一种体系结构移植到另外一种不同的体系结构上的方便程度。
本文介绍了基于arm 开发板的linux内核移植过程,主要包括二方面的内容:交叉编译器的安装、内核的配置与移植。
本文要求读者具备一定的linux操作系统使用经验。
关键词:移植内核 linux一、概述一个嵌入式linux系统的启动顺序可以分为四步:1、引导加载程序(bootloader)。
2、加载linux内核。
3、挂载根文件系统。
4、运行应用程序。
所以要想使linux内核在开发板上运行,就必须对以上四步的相关源代码进行移植操作,使其可运行于嵌入式平台。
本文主要介绍内核移植部分,其余部分可参考相应书箱或文档。
二、开发环境的建立2.1、安装虚拟机、fedora13操作系统及相关的开发工具(gcc、gedit等),本文的所有操作均是在这种开发环境下进行,本文的工作目录为 \work,且都是在root权限下操作。
2.2、交叉编译器(arm-linux-gcc)的安装。
交叉编译器是嵌入式linux开发的基础,后续的移植过程都要用到此编译器,在linux pc平台下,利用arm-linux-gcc编译器可编译出针对arm linux平台的可执行代码。
安装过程如下:a、网上获取arm-linux-gcc-4.3.2.tgz源代码包并保存于/work 目录中。
b、解压命令(tar xvzf arm-linux-gcc-4.3.2.tgz -c /)注意上面的命令必须是大写c且后面有个空格,这样将源代码解压至目录/usr/local/arm/4.3.2中。
c、配置编译环境路径。
输入命令(gedit /root/.bashrc)打开.bashrc文件,在最后一行加入如下内容:exportpath=/usr/local/arm/4.3.2/bin:$path保存关闭文件,用root重新登录系统,输入命令:(arm-linux-gcc –v)如果安装成功将会显示arm-linux-gcc的版本号。
Linux2.6内核移植系列教程第一:Linux 2.6内核在S3C2440平台上移植此教程适合2.6.38之前的版本,其中2.6.35之前使用同一yaffs补丁包,2.6.36--2.6.28 yaffs文件系统有所改变,2.6.39之后的暂时不支持,源码下载请到:/1.解压linux-2.6.34.tar.bz2源码包#tar jxvf linux-2.6.34.tar.bz22.修改linux-2.6.34/Makefile文件,在makefile中找到以下两条信息并做修改ARCH ? =armCROSS_COMPILE?=/usr/local/arm/4.3.2/bin/arm-linux-注意:交叉编译器的环境变量也需要改为4.3.2#export PATH=/usr/local/arm/4.3.2/bin/:$PATH其中ARCH变量用来决定:配置、编译时读取Linux源码arch目录下哪个体系结构的文件PATH 用来决定交叉编译器版本3.修改机器类型ID号Linux源码中支持多种平台的配置信息,内核会根据bootloader传进来的mach-types决定那份平台的代码起作用,本人手里的板子是仿照三星公司官方给出的demo板改版而来,所以采用arch/arm/mach-s3c2440/mach-smdk2440.c此配置文件,打开此文件,翻到最后,有以下信息:MACHINE_START(S3C2440, "SMDK2440")/* Maintainer: Ben Dooks <ben@> */.phys_io= S3C2410_PA_UART,.io_pg_offst= (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,.boot_params= S3C2410_SDRAM_PA + 0x100,.init_irq= s3c24xx_init_irq,.map_io= smdk2440_map_io,.init_machine= smdk2440_machine_init,.timer= &s3c24xx_timer,MACHINE_ENDMACHINE_START(S3C2440, "SMDK2440")决定了此板子的mach-types,可以在以下文件中找到S3C2440对应的具体数字,"arch/arm/tools/mach-types"文件查找S3C2440,362,这里刚好与我们的bootloader相同,所以不用做修改,直接保存退出即可,如果不同则根据bootloader的内容修改此文件,或根据此文件修改boorloader的内容(在vivi中可通过param show查看,u-boot在Y:\test\u-boot_src\u-boot_edu-2010.06\board\samsung\unsp2440\unsp2440.c文件:gd->bd->bi_arch_number = MACH_TYPE_S3C2440;中决定)。
内核移植实验总结
一、实验目的
完成内核移植实验,以深入理解操作系统内核在不同硬件平台的移植过程。
二、实验内容
1. 配置ARM Linux 开发环境,包括异常处理,内存管理,设备驱动等有关linux 内核模块的移植。
2. 在ARM GRSDK 上移植kernel,并使其具有多任务,多线程,MPU,任务调度,中断处理,内存管理,设备驱动等功能。
三、实验结果
1. 配置ARM Linux 开发环境成功,可以对ARM 芯片进行编程,并能够在开发板上运行程序;
2. 在ARM GRSDK 上移植kernel 成功,能够正常运行linux 系统,并具有多任务,多线程,MPU,任务调度,中断处理,内存管理及设备驱动等功能。
四、实验体会
通过本次实验,深入了解了ARM Linux 内核的移植,学会了如何在ARM GRSDK 上移植Linux 内核,以及如何添加中断处理,内存管理,设备驱动等模块。
本次实验是一次宝贵的经验,也让我对操作系统内核的原理有了更深刻的理解,让我对操作系统的知识有了更加全面深入的认识。
- 1 -。
物理与电子工程学院《嵌入式系统设计》课程小论文课题题目 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 的操作系统。
在其发展过程中得到分布于全世界的广大OpenSource 项目追随者的大力支持。
尤其是一些曾经参与Unix 开发的人员,他们把应用于Unix 上的许多应用程序移植到Linux 上来,使得Linux 的功能得到巨大的扩展。
随着其功能不断加强,灵活多样的实现加上其可定制的特性以及开放源码的优势, Linux 在各个领域的应用正变得越来越广泛。
其中uClinux 的设计就是通过对标准Linux 内核裁减,去除虚拟内存管理部分的代码,并对内存分配进行优化,从而达到提高系统运行效率的目的。
它虽然体积小但依然保存了Linux 内核的大多数优点。
例如:支持通用Linux API、内核体积可以小于512K、具有完整的TCP/IP 协议栈等等。
2. Linux系统及Linux内核以及移植简介2.1 Linux系统简介一个完整的系统主要5部分组成:硬件、Bootloader、操作系统内核、操作系统服务和用户应用程序,如图1所示:图1 一个系统的组成各模块作用:(1) 用户应用程序是指那些字处理程序、互联网应用程序或其它用户自行编制的各种应用程序;(2) 操作系统服务程序是指向用户提供的系统调用等接口程序;(3) Bootloader主要完成硬件检测和系统引导;(4) 操作系统内核是操作系统的主要核心部分,是整个系统的灵魂。
其中,操作系统服务程序、操作系统内核及Bootloader被看作是操作系统部分。
2.2 Linux内核简介Linux内核主要由进程调度模块、内存管理模块、文件系统模块、进程间通信模块和网络接口模块5个模块构成,如图2所示。
图2 Linux内核系统模块结构及相互依赖关系各模块作用:(1)进程调度模块负责控制进程对CPU资源的使用,所采用的调度策略使各进程能公平合理地访问CPU,同时保证内核能及时执行硬件操作;(2)内存管理模块用于确保所有进程安全共享机器主内存区,它还支持虚拟内存管理方式,使Linux的进程可以使用比实际内存更多的内存容量,并可以利用文件系统把暂时不用的内存数据块交换到外部存储设备上去,当需要的时候再交换回来;(3)文件系统模块用于支持对外部设备的驱动和存储;(4)进程间通信模块用于支持多种进程间的信息交换方式;(5)网络接口模块提供对多种网络通信标准的访问并支持许多网络硬件。
Linux是开放源代码的,Linux操作系统设计本身具有的不同平台之间的可移植性,而且所需的存储空间也很小。
Linux内核是Linux最底层、最核心的部分,Linux操作系统就是在Linux内核上发展壮大起来的,而内核的移植则是任何嵌入式Linux开发中最关键部分。
所有的内核源程序都可以在/usr/src/linux下找到,大部分应用软件也都是遵循GPL而设计,遍布全球的众多Linux爱好者又是Linux开发者的强大技术支持。
例如:在Linux2.6的内核里主要包含有以下目录:/arch 主要是和体系结构相关的代码,里面几乎包含了目前流行的多数处理器体系结构,如ARM、Alpha、1386、MIpS、M68K、powerpC等。
/block 主要是块设备的驱动程序。
/drivers 字符设备以及一些常用计算机外设的驱动程序,主要针对通用计算机,也有针对具体嵌入式处理器的外设驱动。
/fs 文件系统相关代码,有些用于虚拟文件系统。
/include 主要包含各种CPU的头文件,也有一些通用的.h文件。
/init Linux 内核的初始化代码,有main函数以及init线程的代码。
/incLinux 进程通信机制相关代码。
/kemel 通用的内核文件,包含内核基本功能部分的实现,如进程、时间等。
/mm 内存管理部分。
/net 网络设备的驱动程序。
2.3 内核移植简介2.3.1 移植的基本概念移植,从广义上讲,移植包括软件移植和硬件移植;从狭义上讲,移植就是指软件移植,即将一个软件从一个平台迁移到另外一个与众不同的平台上工作。
移植可分为三种情况:1. 从一个硬件平台移植到另外一个硬件平台首先是工具链的移植,在PC机上编译时要建立交叉编译工具链,同时还要考虑binutils、glibe等移植;其次是内核移植,主要包括两方面,一是arch目录下的体系结构的移植,二是移植drivers目录下的许多硬件驱动程序;最后是应用程序的移植,如Qt/embedded库的移植等。
2. 从一个操作系统移植到另外一个操作系统这种移植较常见。
如:将Windows系统下运行的程序移植到Linux/UNIX系统中。
3. 从一种软件库环境移植到另外一种软件库环境这种类型的移植也较常见,如:将基于glibc库环境的程序移植到基于uclibc库环境去。
2.3.2 内核移植的准备Linux内核相对于其他操作系统而言有很多优点,如:平台的独立性、代码开放性等,所以被大多数硬件平台所选用,它现在已经成为嵌入式系统中的一个主流操作系统。
移植内核首先要确保准备好编译内核的工具,Linux内核归根结底也是一个程序,所以它必须通过编译器编译后才能在硬件上执行;其次,从站点下载要移植的内核代码;最后检查要移植的开发板硬件是否准备就绪,准备完成后就可以正式移植内核了。
3.内核移植3.1 内核移植基本流程图3 内核移植的过程3.2 内核配置3.2.1 修改Makefile(1)修改内核根目录下的Makefile文件,指明要用的编译器为arm-linux-交叉编译器,使用的体系结构为ARM。
具体操作如下:#cd linux-2.6.10#vi Makefile3.2.2 设置NAND Flash分区首先建立一个NAND Flash分区表,该分区表用来定义开发板上64MB的空间划分,以及定义各分区存放的起始地址以及大小等。
该部分实现在arch/arm/mach-s3c2410/devs.c 源文件中,需修改如下://首先添加相应的头文件#include<linux/mtd/partitions.h>#include<linux/mtd/nand.h>#include<asm/arch/nana.h>…/新建64MB的NAND Flash分区表*/{/*1MB*/name:”bootloader”,size:0x00100000,offset:0x0,},//定义一个NAND Flash 分区数据结构struct s3c2410_nand_set namdset={nr_partitions:4, //定义分区数partitions: partitions_info, //定义分区表};其中,name为分区的名称,size为分区的大小,offset为分区在Flash中的起始地址,同时还定义了NAND Flash的分区数据结构。
(2)紧接着要建立内核对NAND Flash芯片的支持,同时加入对NAND Flash芯片的支持代码到NAND Flash 的驱动程序。
Arch/arm/mach-s3c2410/devs.c中的具体代码实现如下://建立NAND Flash 的芯片支持数据结构struct s3c2410_platform_nand superlpplatform={tacls:0,twrph0:1,twrph1:0,sets:&nandset, //定义支持的分区集nr_sets:1, //定义分区集数},tacls:0,twrph0:1,twrph1:0含义为:tacls=1个HCLK时钟,twrph0=2个HCLK时钟,twrph1=1个HCLK时钟。
(3)在内核启动时正确添加对NAND Flash分区表的初始化配置,还需要修改Arch/arm/mach-s3c2410/mach-smdk2410.c源文件,修改如下://增加对NAND Flash设备的支持static struct platform_device *smdk2410_devices[]_initdata={&s3c_divece_usb,&s3c_divece_lcd,&s3c_divece_wdt,&s3c_divece_i2c,&s3c_divece_iis,&s3c_divece_nand //添加此行来初始化新增的NAND Flash分区},(4)禁止Flash ECC校验由于BootLoader通过软件已经产生了ECC校验码,这与内核的ECC校验码不一致,所以要禁用禁止内核ECC校验。
3.2.3 配置内核选项操作如下:#cd linux-2.6.10#cp arch/arm/configs/sndk2410_defconfig .config#make menuconfig配置内核的方法:1. make configmake config提供了一个命令行接口方式来配置内核,它会一个接着一个的询问关于每一个选项。