`
ugv32ugv
  • 浏览: 18587 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

嵌入式Linux的移植的理论问题

 
阅读更多

嵌入式Linux的移植的理论问题
2010年12月24日
  移植的基本概念:
  
移植是指将软件从一个平台迁移到另一个平台
  Ø从一个硬件平台移植到另一个硬件平台
  Ø从一个操作系统移植到另一个操作系统
  Ø从一种软件库环境移植到另一个软件库环境
  软件进行移植的容易程度即可移植性
  Linux硬件平台:
  
在Linux内核里,每一个处理器指令集对应一个独立的体系结构architecture,比如alpha, arm,i386, mips, ppc
  每个体系结构可以有若干变种variant,或不同配置的硬件machine
  统称sub-architecture。以arm体系结构举例
  Øvariants 包括arm7tdmi, arm926ejs, strongarm,xscale
  Ømachine 包括edb7312, smdk2410, omap-h2
  硬件平台对C程序的影响:
  
处理器字长,定义为处理器一次能处理的数据位数。
  字长等于处理器内部数据通路的宽度,一般可以通过通用寄存器的宽度来判断
  处理器字长会影响int, long等C类型的长度
  C代码当中需要使用确定大小的数据类型,可以使用显式长度的类型u8, s8, u16, s16, u32, s32, u64, s64
  数据对齐:
  数据对齐是指数据块的地址是某个特定大小的整数倍
  Ø32位处理器字对齐n*4
  Ø页对齐n*PAGESIZE
  ØCache line对齐n*CLINESIZE
  数据访问要求至少是字对齐的,多数情况下编译器会处理数据访问的对齐。不对齐访问的例子
  Øchar a[10];
  Øunsigned long* pl = (unsigned long *)(a+1);
  Øunsigned l = *pl;
  字节顺序:
  
字节顺序byte order是指一个字中字节排列的顺序
  不同硬件可能采用不同byte order
  Ø x86 little-endian
  Ø ppc big-endian
  Linux内核将硬件的byte order放在 里面定义,__BIG_ENDIAN或__LITTLE_ENDIAN
  在include/linux/byteorder /里面有几个头文件,定义了
  Ø u23 __cpu_to_be32(u32);
  Ø u32 __cpu_to_le32(u32);
  Ø u32 __be32_to_cpu(u32);
  Ø u32 __le32_to_cpus(u32);
  时间:
  软件中的与时间相关的代码也会影响移植
  采用平台无关的时间表达方法可以提高代码可移植性
  Linux内核里面采用HZ来表示每秒钟有多少个内部时钟滴答,以下对时间的描述是平台无关的
  Ø HZ
  Ø (2*HZ)
  Ø (HZ/2)
  Ø (HZ/100)
  Ø (2*HZ/100)
  内存页面大小:
  
Linux使用虚拟内存机制来管理内存,内存的使用基于页面。
  不同的体系结构有不同的页面大小
  常用的32位处理器使用4kB页面大小
  部分体系结构可以支持多种页面大小
  内核在里面定义PAGE_SIZE,PAGE_SHIFT
  Ø PAGE_SIZE表示页面大小
  Ø PAGE_SHIFT表示页面号在地址中的偏移量
  Ø PAGE_SIZE=2^ PAGE_SHIFT
  Linux操作系统移植:
  工具链移植
  Øbinutils (assembler, linker..)
  Øgcc (compiler, libgcc)
  Øglibc/uclibc
  内核移植
  Øarch implementation
  Ødrivers porting
  应用程序移植
  ØC program recompile
  ØImplement absent library
  Linux内核的平台相关代码:
  Linux内核对多平台有很好的支持 内核的对外部接口是统一的,并且与平台无关
  内核的大多数代码也是与平台无关的主要的体系结构相关代码存在于
  Øarch/architecture
  Øinclude/asm-architecture
  比如arm体系的平台相关代码主要是
  Øarch/arm
  Øinclude/asm-arm
  已有代码向Linux内核移植:
  将已有代码向内核中移植有一些限制
  Ø内核中没有标准C库支持
  Ø内核中没有象用户程序那样的内存保护
  Ø内核中不便使用浮点操作
  Ø内核的堆栈是固定大小的,并且比较有限
  Ø在内核中需要编程者考虑并发带来的竞争与冒险,以及同步问题
  Linux内核移植:
  
Linux内核代码可以分为平台相关部分和平台无关部分
  Linux内核绝大部分代码是平台无关的,
  可以被各种平台所共享
  Ø 调度算法
  Ø 存储器管理
  Ø I/O子系统
  Ø 网络协议栈
  依赖于特定硬件的代码在Linux中采用条件编译的方式区分
  Ø ARCH = x86 即打开x86特有的代码
  Ø ARCH = arm 即打开arm特有的代码
  Linux内核的arch目录:
  进入arch目录,每个体系结构代码都有一个子目录
  进入arm目录,在arm体系结构下我们可以看到很多sub-arch的子目录
  实现sub-arch:
  在sub-arch子目录下,以mach-s3c2410为例 一个硬件平台支持需要实现以下几个硬件相关的文件
  Ø mach-s3c2410.c, irq.c, clock.c, dma.c, gpio.c, pm.c,sleep.c, time.c
  Ø 同时在include/asm-arm/arch-s3c2410要实现
  Low-level IRQ helper macros
  Debug output macros
  Irq number definations
  DMA definations
  Memory mapping/translation
  Reset operation
  IDLE function
  mach-smdk2410.c:
  在mach-smdk2410.c中,我们要定义以下几个内容
  smdk2410_iodesc,描述了所有保留的设备io地址。这个描述符是我们移植一个特定目标板非常重要的地方
  在这个板描述文件中还要定义
  .phys_ram
  .phys_io
  .io_pg_offst
  .boot_params
  .map_io
  .init_irq
  .timer
  map_io:
  map_io里面需要实现设备io的初始化
  在这里要用到smdk2410_iodesc描述符。该描述符是一个数组,其中每一项都描述了一个设备的IO映射
  时钟pll的设置、uart的设置都可以在map_io中调用
  init_irq:
  在这个调用里面,关于中断的初始化将会被完成
  Ø清除中断pending寄存器
  Ø注册主要的中断处理程序
  Ø设置系统中的设备中断
  timer:
  timer是一个sys_timer类型的结构,它包含以下成员
  -init 调用执行硬件相关的timer初始化
  -offset 调用返回自从上次timer中断以来经过的微秒数
  -resume 调用执行系统唤醒后的timer恢复操作,一般实现上和init里面的初始化一样
  应用程序移植:
  
最理想情况下,程序可以不作更改,或仅仅打一些补丁,然后告诉编译环境按照目标环境要求编译即可
  Øbusybox
  Øbash
  Øsysv init
  依赖某些平台特性的应用程序移植起来往往难度更大
  Ø图形库
  Ø为速度进行优化的代码,比如编解码器
  软件编程语言的跨平台性直接影响软件的可移植性。此外还有其他因素
  软件协议/源代码的开放程度
  应用程序移植常见问题:
  
1依赖软件造成移植性问题
  ØC库版本问题
  Ø图形库带来的问题
  Ø软件依赖某些服务带来问题
  2网络应用在little-endian平台上的处理
  Ø网络传递数据是big-endian的
  3软件依赖特定平台的特性
  4平台的数据一致性模型差异
分享到:
评论

相关推荐

    嵌入式linux的移植的理论问题借鉴.pdf

    嵌入式linux的移植的理论问题借鉴.pdf

    嵌入式Linux操作系统内核移植的研究与实践.pdf

    本文详细介绍了操作系统移植的理论,概述了Linux内核移植的基本原理。

    关于嵌入式linux移植的理论问题

    嵌入式Linux的概念  应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。举例来说,大到油田的集散控制系统和工厂流水线,小到家用VCD机或...

    嵌入式linux开发教程之移植的理论--千锋培训

    文档介绍了移植的基本概念,嵌入式linux开发教程之Linux硬件平台,硬件平台对C程序的影响,嵌入式linux开发教程之数据对齐,字节顺序,时间,内存页面大小,嵌入式linux开发教程之Linux操作系统移植,Linux内核的...

    嵌入式系统/ARM技术中的关于嵌入式linux移植的理论问题

    嵌入式Linux的概念  应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。举例来说,大到油田的集散控制系统和工厂流水线,小到家用VCD机或...

    ARM 嵌入式LINUX 系统构建与驱动开发

    在找工作中更是这样,举个例子,联想里和ARM最接近的是“BIOS工程师”是软件,MOTO里接近的是嵌入式LINUX工程师是软件。而其他很多公司把嵌入式产品开发归为硬件。 所以,不要讨论这个,好好玩转自己的板子才是关键...

    嵌入式Linux高级班讲义

    本课程旨在培养具备全面嵌入式Linux开发能力的人才,采用理论教学与实践相结合的方式,系统地介绍了Linux下应用程序设计,系统移植,内核开发、设备驱动程序开发。通过本课程的学习,学员可以掌握Linux下字符设备、...

    ARM9嵌入式系统设计-基于S3C2410与Linux

    针对在嵌入式市场上颇具竞争力的ARM9处理器——S3C2410和开放源码的Linux操作系统,讲述嵌入式系统的概念、软硬件的开发和调试手段、嵌入式Linux驱动程序和应用程序的开发以及图形用户界面MiniGUI的移植和应用。...

    基于嵌入式Linux的H264视频播放系统设计

    通信技术等,是通信领域研究的主要方向之一,使得对基于嵌入式技术实现视频的传输、解码、播放的研究更加迫切,并具有理论意义和实践意义通过对嵌入式、数字图像等技术的深入研究,提出了基于嵌入式 Linux的H264视频...

    嵌入式ARM系统实战开发

    通过本课程的学习,学员可以掌握ARM开发环境的搭建、ARM的汇编程序设计、ARM的C程序设计、嵌入式硬件设计、ARM的裸板驱动设计等能力,引导学员进入嵌入式开发的精彩世界,为后续深入学习嵌入式Linux驱动编程打下坚实...

    嵌入式系统开发圣经

    嵌入式系统开发圣经 大小为42M的书,给你提供详细的嵌入式开发知识,是学习的好资料 本书特色:详细的理论讲解,让你全面了解当前...5-6-8 选择嵌入式Linux图形接口 5-6-9 自己动手做Linux Based iPAQ 5-7 结束语

    《嵌入式系统开发圣经(第二版)》电子版

    389 5-5-5 应用层 389 5-5-6 Java Phone 390 5-5-7 新一代智能型手机 390 5-5-8 持续创新的Symbian OS v7.0 392 5-5-9 系统开发环境 394 5-6 嵌入式Linux相关技术 395 5-6-1 嵌入式Linux 概述 ...

    微型嵌入式GUI演示程序

    已成功移植 DOS,Linux,uc/OS-II 内置 内存分配模块,满足在 uC/OS-II 等嵌入式环境中 GUI 对 malloc/free 的需求 内置 单个汉字拼音输入法 体积小巧 大小在 100KB~180KB 独特风格的GUI界面,实用,友好 图标等图像...

    Linux设备驱动详解第二版

    《Linux设备驱动开发详解(第《Linux设备驱动开发详解(第2版)》内容全面,实例丰富,操作性强,语言通俗易懂,适合广大Linux开发人员、嵌入式工程师参考使用。 图书目录 第1篇 Linux设备驱动入门 第1章 Linux...

    linxu设备驱动开发详解

    宋宝华:华清远见嵌入式培训中心金牌讲师,多年嵌入式系统从业经验,熟悉嵌入式系统软硬件设计的全过程,有丰富的嵌入式系统硬件设计经验,精通嵌入式Linux、Vxworks操作系统,尤其擅长Linux设备驱动开发,原创性地...

    嵌入式系统/ARM技术中的嵌入式根文件系统的移植和制作详解

     理论上说一个嵌入式设备如果内核能够运行起来,且不需要运行用户进程的话,是不需要文件系统的,文件系统简单的说就是一种目录结构,由于 linux操作系统的设备在系统中是以文件的形式存在,将这些文件进行分类管理...

    嵌入式红绿灯控制系统

    嵌入式红绿灯控制系统(模拟) 一、摘要: 交通信号灯用于道路平面交叉路口,通过对车辆、行人发出行进或停止的指令,使人与人、车与车之间尽可能减少相互干扰,从而提高路口的通行能力,保障路口畅通和安全。本文...

    mini2440学习教程(国嵌培训专用)part1

    本课程旨在培养具备全面嵌入式Linux开发能力的人才,采用理论教学与实践相结合的方式,系统地介绍了Linux下应用程序设计,系统移植,内核开发、设备驱动程序开发。通过本课程的学习,学员可以掌握Linux下字符设备、...

    mini2440学习教程(国嵌培训专用)part2

    本课程旨在培养具备全面嵌入式Linux开发能力的人才,采用理论教学与实践相结合的方式,系统地介绍了Linux下应用程序设计,系统移植,内核开发、设备驱动程序开发。通过本课程的学习,学员可以掌握Linux下字符设备、...

    jdk1.8-最新版-linux-32位CSDN下载

    Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。 Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点...

Global site tag (gtag.js) - Google Analytics