首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

嵌入式linux的移植的理论问题 01

嵌入式linux的移植的理论问题 01

移植的基本概念:
  移植是指将软件从一个平台迁移到另一个平台
  * 从一个硬件平台移植到另一个硬件平台
  * 从一个操作系统移植到另一个操作系统
  * 从一种软件库环境移植到另一个软件库环境
  软件进行移植的容易程度即可移植性
  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放在<asm/byteorder.h> 里面定义,__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)
返回列表