嵌入式系统移植

搭建开发环境

1.先在上位机搭建嵌入式linux开发环境:
a. 安装Linux系统;
b. 安装必要的软件;
c. 安装交叉编译器:最好从厂家获取;
2.然后在下位机搭建Linux开发环境:
a. 大致了解cpu型号,内存大小和其基地址,闪存类型
b. 明确一个完整的嵌入式Linux系统包括三个部分:
bootloader:系统的加载启动任务由bootloader完成,它是操作系统内核运行之前运行的一段小程序,uboot就属于bootloader的一种
Linux内核:它由uboot启动,当它运行的时候,uboot生命周期结束,Linux内核有五大子系统:内存管理子系统、进程管理子系统、虚拟文件系统、网络协议栈和进程间通信;
根文件系统rootfs:根文件系统的1号进程执行shell程序;
c. 进行uboot移植、Linux移植和根文件系统镜像的制作和使用,具体的移植过程后续分解

uboot移植

系统的加载启动任务由bootloader完成,它是操作系统内核运行之前运行的一段小程序,uboot就属于bootloader的一种,他的本质就是一个裸板程序,主要有三个功能:上电运行后进行硬件的初始化工作,建立内存空间映射图,给Linux内核准备好的软硬件环境;加载Linux内核到内存(uboot提供环境变量指定内核加载位置),并且启动Linux内核;给Linux内核传递启动参数,告诉Linux内核要找的根文件系统rootfs的位置;
uboot特点:

  1. 软件开源;
  2. 本质是一个裸板程序;
  3. uboot上电后后先运行,待到Linux启动,uboot生命结束;
  4. 支持多种处理器架构:arm, mips, FPGA, X86, POWERPC等;
  5. 支持启动多种操作系统:Linux vxworks等
  6. 丰富的驱动源代码,如串口、FLASH等;

uboot启动流程:
第一阶段:设置svc模式-》屏蔽FIQ、IRQ-》关闭看门狗-》禁止MMU-》使缓存中的数据无效-》清空BSS段-》一系列硬件初始化;
第二阶段:获取bootdelay的值,倒数读秒计时过程无打断即执行bootcmd中的命令,加载启动Linux;计时过程打断输出命令提示符,接收用户输入的命令

uboot移植过程:

  1. 从芯片厂家获取芯片源码;
  2. 对官方源码进行编译验证,验证源码是否完整,版本与交叉编译器是否匹配;
  3. 进行make distclean 清除原先编译生成的文件,获取最干净的源码;
  4. make s5p6818_config (XXX是开发板的名称) 配置uboot源码,然后make交叉编译
  5. 将编译好的ubootpak.bin下载到内存中运行:
    5.1. 设置uboot环境变量 setenv serverip 192.168.1.8 然后保存saveenv
    5.2. 上位机利用tftp服务下载文件到下位机内存tftp 0x48000000 ubootpak.bin
    5.3. 向emmc烧写uboot update_mmc 2 2ndboot 0x48000000 0x200 0x78000
    5.4. 使用ping命令查看网络连接状态,联通后执行复位按键, cpu运行emmc上的uboot

内核移植

Linux内核特点:linux内核由bootloader启动;本质是一个大程序;Linux内核支持多种处理器架X86,POWERPC,FPGA,DSP,ARM;支持多种文件系统格式

linux内核移植:

  1. 从芯片厂家获取内核源码;
  2. 对官方源码进行编译验证,验证源码是否完整,版本与交叉编译器是否匹配;
  3. 进行make distclean 清除原先编译生成的文件,获取最干净的源码;
  4. 修改顶层目录Makefile,修改架构和交叉编译器:
    195 ARCH ?= arm
    196 CROSS_COMPILE ?= arm-cortex_a9-linux-gnueabi-
  5. 配置内核:cp arch/arm/configs/x6818_defconfig .config,配置内核的原因:因为linux支持多种硬件平台,配置为了将特定硬件平台相关代码选出来;裁剪掉当前项目中不会使用到的部分(make menuconfig)
  6. 编译make uImage
  7. 使用tftp下载内核到内存,然后拷贝到emmc中
  8. 在uboot中设置相关环境变量用来启动内核与找到根文件系统

根文件系统的移植

###根文件系统的制作

你可能感兴趣的:(嵌入式系统移植)