系统移植笔记

1、什么是移植?

移植就是将bootloader的源代码、linux内核源代码,文件系统中用户态程序代码根据硬件做少量修改,使其能够在目标硬件平台运行起来的过程。(前提:两个平台硬件差异比较小)

在嵌入式系统中通常没有像BIOS那样的固件程序(注:鱼的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由bootloader来完成。

 boot loader中一部分用汇编来写,因此针对不同的CPU体系架构,这一部分代码不具有可移植性(X86与ARM分别有各自的汇编语法)。在移植OS时这部分代码必须改写,bootloader不但依赖CPU架构,而且依赖嵌入式板级设备的配置;

2、boot loader基本功能

①初始化硬件

②将操作系统内核从外存(flash、emmc、sd卡等)拷贝到内存(sdram等)中;

③改写系统的内存映射,原先flash地址映射为0地址,这时需要将RAM的地址映射为0;

④设置堆栈指针并将bss段清零,执行C程序和调用子函数时要用到

⑤提供linux内核的启动参数

⑥启动linux内核

⑦改变PC值,使得CPU开始执行真正的OS内核;

3、linux内核功能及本质

功能:

进程管理(多任务并发、IPC)、文件系统(裸板需要知道存储emmc的偏移地址、文件所占字节大小;在OS中只需要知道文件路径)、网络协议(内核源码实现了TCP/UDP等协议的源码)、设备管理、内存管理(裸板操作物理地址、内核操作虚拟地址)

内核本质:

①从C语言角度来看内核:C语言函数集合

②从硬件角度来说是硬件管理者

③为应用程序的运行提供服务

4、uboot“通用”的两层含义

①支持多架构CPU:PowerPC、MIPC、X86、ARM等;(专门对应相应的CPU写了代码)

②支持多种OS:Linux、VxWorks、QNX、LynxOScar等OS;(针对每种OS的启动方式不同写了相应代码)

uboot源码获取:由上游厂商提供,基于某款参考板,可以运行的,直接拿来移植工作量是最小的(比如三星公司生产的S5P6818处理器,其硬件工程师会围绕S5P6818处理器画一块demo板子出来,把常见的外围设备(LCD屏、网卡、触摸屏、音频、USB、emmc等),软件工程师会拿uboot源码根据设计的demo板去修改编写源码,也会拿linux移植到demo板;目的做硬件验证;二是做市场推广。

5、为什么要配置内核?

①选出硬件相关代码  ARCH?=arm

②内核作为软件,包含了大量的功能;例如,内核支持的文件系统类型:vfat\nfs\ext4\jffs2\yaffs...但实际产品中可能只需要其中部分文件系统,其余文件系统不需要编译进内核,所以通过配置、裁剪掉不需要的功能(不参与uimage文件的编译过程,所以uimage文件所占的存储空间会小一点  );

6、根文件系统

文件系统 = 数据(文件)+ 索引 + 代码 

根文件系统:linux启动后加载的第一个真实文件系统(其实也是一个文件系统,但是类似于家里的孩子老大,虽然是个孩子但作为老大也得让着弟弟妹妹),但是作为linux加载的第一个文件系统,有一点特殊要求,也就是文件系统里得有写一些相应的文件:/bin、/dev、/etc、/lib、/mnt、/opt、/usr等(目录里存储的具体内容可百度);

 也就是把linux内核之外的东西(五大件)都放到了根文件系统;

(根目录:根文件系统的顶层目录称为根目录,通常表示为斜杠符号 “/”,所有其他文件和目录都从根目录开始,通过路径来访问。)

linux内核在启动过程中要挂载根文件按系统,如果根文件系统出现问题,则linux系统启动过程中会卡死;

7、linux系统下的API分两种:

①内核提供的API(函数)叫系统调用,比如fork创建进程、open打开文件、socket网络通信;

②内核之外有库,库里面也会提供一些API,比如printf、fopen、pthreadcrwat;

 可以认为ls、cd等shell命令是一些app,当运行这些命令的时候,这些命令会调用linux的系统调用实现相应功能;linux内核提供的系统调用数量有限(无非围绕内核五大件);(linux内核就2-3M);

根文件系统系统下的/lib里面是*.so(动态链接库),保存的是printf、fopen、fclose、fread、fwrite等函数;

(ubuntu自带根文件系统,也就是进入根目录)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值