我来说linux移植过程

合集下载

基于ARM平台Linux内核移植论文

基于ARM平台Linux内核移植论文

基于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的版本号。

Linux内核配置移植及编译实验

Linux内核配置移植及编译实验

return platform_driver_register(&dm9k_driver); } 7.添加 YAFFS 文件系统支持 将我们提供的 YAFFS 的源代码 yaffs2.tar.gz 拷贝到 linux-2.6.24.4 的同 级目录下,解压该源码包,获得 YAFFS 源码: # pwd /root/2410-s # cp /mnt/hgfs/e/yaffs2.tar.gz ./ # tar zxvf yaffs2.tar.gz 然后进入 yaffs2 目录,运行./patch-ker.sh 给内核打上补丁: # cd yaffs2 # ./patch-ker.sh c ../linux-2.6.24.4/ 这样打好补丁以后,再做正确的配置,内核就可以支持 YAFFS 文件系统了。 8.配置和编译内核 到现在,一个简单的内核就准备好了,我们还需要做一些配置,然后编译, 内核才能正常使用。 在内核源代码的根目录下运行 make menuconfig 命令,进入配置界面: # make menuconfig (1)选择硬件系统 做如下选择: System Type --->
S3C2410 Machines ---> [*] SMDK2410/A9M2410 [ ] IPAQ H1940 [ ] Acer N30 [ ] Simtec Electronics BAST (EB2410ITX) [ ] NexVision OTOM Board [ ] AML M5900 Series [ ] Thorcom VR1000
.size = SZ_4M, }, [3] = {
.name = "User Space", .offset = 0x680000, .size = 0x1980000, }, }; 这样就把我们的 64M 的 NAND Flash 分为四个区: 第一个区从 0x00000000 到 0x00080000,大小为 0.5M 第二个区从 0x00080000 到 0x00280000,大小为 2M 第三个区从 0x00280000 到 0x00680000,大小为 4M 第四个区从 0x00680000 到 0x02000000,大小为 25.5M 5.添加 LCD 支持 我们的开发平台上配置有 640*480 的液晶屏,我们来为它加上驱动支持。 需要在 arch/arm/mach-s3c2410/mach-smdk2410.c 中添加一些内容。 # vi arch/arm/mach-s3c2410/mach-smdk2410.c 首先要包含我们的 LCD 使用的数据结构的头文件,增加如下内容: #include <asm-arm/arch-s3c2410/fb.h> #include <linux/platform_device.h> 然后添加如下内容: static struct s3c2410fb_display up2410_fb[] __initdata = { { .lcdcon5 = (1<<12)|(1<<11)|(1<<9)|(1<<8)|(1<<0), .type = (3<<5), .width = 640, .height = 480, .pixclock = 39721,

第8章 基于ARM的Linux内核移植

第8章  基于ARM的Linux内核移植

(2)编译测试参考板的Linux内核 为了测试Linux对参考板的支持情况,最好配置编 译Linux内核,在目标参考板上运行测试一下。 对于交叉开发来说,首先应在顶层Makefile中设置 ARCH、CROSS_COMPILE和EXTRA_VERSION 变量,然后才能选择配置指定的体系结构平台。 ARM平台的例子如下 ARCH := arm CROSS_COMPILE := arm-linuxEXTRA_VERSION :=
8.1.2 开发板内核移植 对于内核移植工作来说,主要是添加开发板初始 化和驱动程序的代码。这部分代码大部分跟体系 结构相关,在arch目录下按照不同的体系结构管理 ,下面以ARM S3C2410平台为例,分析内核代码 移植过程。 Linux2.6内核已经支持S3C2410处理器的多种硬件 板,我们可以参考SMDK2410参考板,来移植开 发板的内核
真正系统平台号的定义位置在arch/arm/tools/mach-types 文件。 #machine_is_xx CONFIG_xx MACH_TYPE_xx number smd2410 ARCH_SMDK2410 SMDK2410 193 arch/arm/tools/mach-types中每一行定义一个系统平台号 。“machine_is_xxx”是用来判断当前的平台号名称 ;CONFIG_xxxx是在内核配置时生成的; MACH_TYPE_xxx是系统平台号的定义;number是系 统平台的值。
#include/asm/mach/arch.h
#define MACHINE_START(_type,_name) const struct machine_desc _mach_desc_##_type \ _attribute_((_section_(“.init”))) = { \ .nr = MACH_TYPE_##_type,\ .name = name, … #define MACHINE_END };

第4章 Linux内核裁剪与移植 Linux系统移植(第2版) 教学课件

第4章  Linux内核裁剪与移植 Linux系统移植(第2版) 教学课件
第4章 Linux内核裁剪与移植
4.1 Linux内核结构 4.2 内核配置选项 4.3 内核裁剪及编译 4.4 内 核 升 级
4.1.2 内核源码目录介绍
Linux内核代码以源码树的形式存放,如 果在安装系统的时候已经安装了源码树, 其源码树就在/usr/src/linux下。
1.arch目录
禁用随机heap(heap堆是一个应用层的概念,即堆对CPU是不可见的,它 的实现方式有多种,可以由OS实现,也可以由运行库实现,也可以在一个 栈中来实现一个堆)
Choose SLAB allocator Profiling support Kprobes
选择内存分配管理器,建议选择 支持系统评测,建议不选 探测工具,开发人员可以选择,建议不选
5.init目录
init子目录包含核心的初始化代码(注意, 不是系统的引导代码)。它包含两个文件 main.c和version.c,这是研究核心如何工 作的一个非常好的起点。
6.ipc目录
ipc子目录包含核心进程间的通信代码。 Linux下进程间通信机制主要包括管道、 信号、消息队列、共享内存、信号量、套 接口。
Physical 选择XIP后,内核存放的物理地址
Kexec system call
Kexec系统调用
4.2.4 网络协议支持相关选项
菜单选项(Networking Support)的子菜 单中包含一些网络协议支持的选项。
选项名 Networking options Amateur Radio support
arch子目录包括了所有和体系结构相关的 核心代码。它的每一个子目录都代表一种 支持的体系结构,例如arm子目录是关于 ARM平台下各种芯片兼容的代码。

linux系统迁移流程

linux系统迁移流程

linux系统迁移流程
1. 收集系统信息
在迁移系统之前,首先要收集系统信息。

包括:
(1)硬件清单和设置,如处理器、存储介质、网络,硬件间的互连接细节,如接口卡以及相应的号码;
(2)系统软件,包括操作系统、基础软件,如语言运行时环境、软件编译器及其他基础设施;
(3)应用软件的详细信息,包括应用软件版本号、功能、安装方式以及与其他应用软件的交互细节;
(4)系统的当前状态,包括系统上的数据、目前的登录用户状态等。

2. 迁移方案开发
具体的迁移方案开发,可以采用系统流程文档的方式,或是绘制流程图的方式,都可以,通常如果迁移系统较复杂,则可以采用流程文档的方式,而在系统迁移的过程中,建议收集系统中的相关信息。

3. 确定迁移期程
确定系统的实际迁移期程。

考虑到系统安装、运行及应用软件的部署时间,需要把握好每个步骤的时间顺序,加以安排。

在确定迁移期程时,要注意系统稳定性,故障开发时间以及整体工期质量。

4. 准备移植软件
在确定迁移期程以后,再根据迁移期程以及系统收集的信息,准备移植软件。

准备移植软件时,要考虑两点:一是要选择正确的操作系统和应用软件;二是对于操作系统的软件语言的的移植,要确保系统的功能没有受影响。

5. 测试系统
完成系统移植后,就要进行系统测试,测试的内容有:操作系统的安装,检查系统性能以及软件数据与原系统及恢复数据的正确性。

6. 文档处理
最后,在系统迁移流程完成以后,要编写系统的相关安装文档,记录迁移过程中可能的偏差,并且要收集相应的历史记录,以便进行完善。

Tiny-S3C6410_Linux下LED灯驱动移植过程

Tiny-S3C6410_Linux下LED灯驱动移植过程

UT-S3C6410 ARM11 Linux 下的LED驱动一、实验环境操作系统:fedora13交叉编译环境:arm-Linux-gcc 或以上,6410板子内核源码路径在:忘了,需要厂家给的内核源代码硬件平台:S3C6410开发板(其他类型的开发板也可以注意配置GPIO)注:交叉编译环境一定要装好,一般的开发板给的配套资料中都会有,安装过程也都有详细的过程,如果没有,亲,你只有自己解决了。

也可以联系我(****************),泪奔支持你们。

二、实验原理控制LED是最简单的一件事情,就像学C语言时候写的“hello world”程序一样,是一个入门的程序。

首先来了解一下相关的硬件知识:UT-S3C6410LED原理图UT-S3C6410LED外部引脚图从上面的原理图可以得知,LED与CPU引脚的连接方法如下,高电平点亮。

LED1 -GPM0LED2 -GPM1LED3 -GPM2LED4 -GPM3从数据手册可以找到相应的控制方法。

这里我们以LED1为例,介绍一下LED1的操作方法,其他的类似,请大家自行分析。

通过上面可以得知,需要先将GPM0设置为输出方式。

将寄存器GPMCON低四位配置成0001。

然后将GPMDAT寄存器的第0位置1灯亮,置LED0灯亮,开发板上有四个LED所以要对GPMDAT的低四位进行操作,就可以实现对灯的亮灭操作了。

三、实验步骤1、编写驱动程序mini6410_leds.c#include <linux/miscdevice.h>#include <linux/delay.h>#include <asm/irq.h>//#include <mach/regs-gpio.h>#include <mach/hardware.h>#include <linux/kernel.h>#include <linux/module.h>#include <linux/init.h>#include <linux/mm.h>#include <linux/fs.h>#include <linux/types.h>#include <linux/delay.h>#include <linux/moduleparam.h>#include <linux/slab.h>#include <linux/errno.h>#include <linux/ioctl.h>#include <linux/cdev.h>#include <linux/string.h>#include <linux/list.h>#include <linux/pci.h>#include <asm/uaccess.h>#include <asm/atomic.h>#include <asm/unistd.h>#include <mach/map.h>#include <mach/regs-clock.h>#include <mach/regs-gpio.h>#include <plat/gpio-cfg.h>#include <mach/gpio-bank-e.h>#include <mach/gpio-bank-k.h>#define DEVICE_NAME "leds"static long sbc2440_leds_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) {switch(cmd) {unsigned tmp;case 0:case 1:if (arg > 4) {return -EINVAL;}tmp = readl(S3C64XX_GPKDAT);tmp &= ~(1 << (4 + arg));tmp |= ( (!cmd) << (4 + arg) );writel(tmp, S3C64XX_GPKDAT);//printk (DEVICE_NAME": %d %d\n", arg, cmd); return 0;default:return -EINVAL;}}static struct file_operations dev_fops = {.owner = THIS_MODULE,.unlocked_ioctl = sbc2440_leds_ioctl,};static struct miscdevice misc = {.minor = MISC_DYNAMIC_MINOR,.name = DEVICE_NAME,.fops = &dev_fops,};static int __init dev_init(void){int ret;{unsigned tmp;tmp = readl(S3C64XX_GPKCON);tmp = (tmp & ~(0xffffU<<16))|(0x1111U<<16); writel(tmp, S3C64XX_GPKCON);tmp = readl(S3C64XX_GPKDAT);tmp |= (0xF << 4);writel(tmp, S3C64XX_GPKDAT);}ret = misc_register(&misc);printk (DEVICE_NAME"\tinitialized\n");return ret;}static void __exit dev_exit(void){misc_deregister(&misc);}module_init(dev_init);module_exit(dev_exit);MODULE_LICENSE("GPL");MODULE_AUTHOR("FriendlyARM Inc.");(1)把Hello,Module 加入内核代码树,并编译一般编译2.6 版本的驱动模块需要把驱动代码加入内核代码树,并做相应的配置,如下步骤(注意:实际上以下步骤均已经做好,你只需要打开检查一下直接编译就可以了):Step1:编辑配置文件Kconfig,加入驱动选项,使之在make menuconfig 的时候出现打开linux-2.6.38/drivers/char/Kconfig 文件,添加如图所示:#====================cgf add===================================== config MINI6410_LEDStristate "LED Support for Mini6410 GPIO LEDs"depends on CPU_S3C6410default yhelpThis option enables support for LEDs connected to GPIO lineson Mini6410 boards.#================================================================== 保存退出,这时在linux-2.6.38 目录位置运行一下make menuconfig 就可以在DeviceDrivers Character devices 菜单中看到刚才所添加的选项了,按下空格键将会选择为<M>,此意为要把该选项编译为模块方式;再按下空格会变为<*>,意为要把该选项编译到内核中,在此我们选择<M>,如图,如果没有出现,请检查你是否已经装载了缺省的内核配置文件,(2)Makefile文件Step2:通过上一步,我们虽然可以在配置内核的时候进行选择,但实际上此时执行编译内核还是不能把mini6410_leds.c编译进去的,还需要在Makefile 中把内核配置选项和真正的源代码联系起来,打开linux-2.6.38-cgf/drivers/char/Makefile,obj-$(CONFIG_MINI6410_LEDS) += mini6410_leds.o添加并保存退出Step3:这时回到linux-2.6.38 源代码根目录位置,执行make modules,就可以生成我们所需要的内核模块文件drivers/char/mini6410_leds.ko 了,注意:执行make modules 之前,必须先执行make zImage,只需一次就可以了。

基于三星S5PV210上的LinuxKernel的移植

基于三星S5PV210上的LinuxKernel的移植

5.2 Linux系统启动流程分析Ubuntu的启动过程主要包括四个步骤:BIOS自检:识别主机上可以启动的设备,一次只能从一个设备上启动,如果一个启动设备失效,就可以使用下一个候选启动设备。

通常是硬盘启动。

启动驻留在硬盘主引导记录MBR中的引导程序Grub或lilo。

Grub/lilo引导启动:如果主机中安装多个操作系统,用户通过Grub或lilo,引导启动Ubuntu Linux系统。

此时操作系统还没有装入内存,引导程序只是将控制权转移给内核。

装载Linux内核:在最初的引导过程完成之后,引导程序开始加载Linux内核,Ubuntu 将Linux内核置于/boot目录下。

系统初始化:内核的初始化阶段将启动系统进程和脚本,init进程是系统开始的第一个工作,它是其他所有进程的父进程,并一直处于运行状态。

使用top命令查看进程,可以发现init进程id号永远是第一个。

init进程读取初始化脚本,完成系统相关的管理任务。

图 5-1 linux系统启动流程6 基于S5PV210的linux内核移植6.1 交叉开发环境的搭建在自己的linux中建立交叉开发环境:安装交叉编译工具链:a 解压“Linux-Android\toolchain”目录下的“arm-none-eabi-4.2.2.tgz”到根“/usr/local”目录下,在“/usr/local”目录下会生成“arm”目录:执行命令:#tar zxvf arm-none-eabi-4.2.2.tgzb 修改环境变量“PATH”:$ sudo vim /etc/environment将路径(下面的红色字体,不加引号)添加到PATH变量的最后面,省略号代表原来PATH的值:PATH=……:/usr/local/arm/4.2.2-eabi/usr/bin”c 保存退出后执行:$ source /etc/ environment这样修改的环境变量会立即生效,于是我们就得到交叉编译工具:6.2 Boot Loader移植Bootloader引导程序在操作系统内核运行之前运行一个程序,一般应被写入为0x00开始的物理地址。

三步将数据从Windows全盘移植到Linux-电脑资料

三步将数据从Windows全盘移植到Linux-电脑资料

三步将数据从Windows全盘移植到Linux-电脑资料你想要从Windows转换到Linux上去吗?你想要从Windows转换到Linux上去吗? 好的,。

就像其他已经走过这一步的用户和企业一样,你可能也是出于Linux的稳定性和开源标准的可靠性而转换系统。

现在你所要做的一切就是仔细地准备好这次转换。

在这里,仔细准备不仅仅意味着在你的系统上装上Linux-不管是你现有的还是一台全新的电脑-它也包括了你的文件、书签、参数和系统设置等。

并且在某些情况下需要去找到一款和你以前所使用的Windows应用所相当的开源应用。

Linux安装过程的本身会因发行版本的不同而各有差异,因此你如果事先没有掌握一定的知识,那就先放下这篇文章,先去熟悉一下安装流程再说。

尽管现在的安装流程要比以前简便很多,但尽可能的去熟悉它对你总会有所帮助。

这个方法能够让你就如何移植你的数据和用户设置做出最佳计划,并且防止意外情况的发生。

数据移植的三种方法有三种基本方法可以将你的用户设置和数据从Windows移植到Linux中:让Ubuntu Linux替你去做。

Ubuntu是目前市面上最为流行的一个Linux发行套件,也是在安装过程中唯一带有内建移植工具的发行套件。

使用第三方应用。

自己动手。

很明显,第三种方法对专业知识的要求是三个方法中最高的,但是它也可以提供给你最大程度上的灵活性,因为你是在自行建立和定制你的系统。

说到灵活性最大化,相比在你现有的电脑上改换操作系统,在一台已装有Linux的新电脑上进行移植将会来的更容易些。

在有一台新电脑的情况下,你可以将那些不确定的东西原封不动的留在旧电脑的系统里。

如果你不得不在你目前装有Windows的电脑上安装运行Linux,那么切记要在移植前备份好你所有的数据。

首先,做备份不管你采用的是哪一种方法,在移植之前最最首要的事情就是将你无法恢复的所有数据做一个完整的备份。

如果你选择将文件移植成新的格式,那么你要保留好原来的那些文件-如果有某个文件在目前无法被正确转换,你始终有原文件在手里。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

我对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的移植、配置,具体移植、配置步骤我另写,呵呵。

最后是构建我们自己的文件系统,到此我们已经完成了内核移植和文件系统的制作。

准备移植,呵呵。

今天先写到这里,累了。

相关文档
最新文档