linux系统移植

对linux驱动开发需要将精力放在linux驱动框架上,在进行linux驱动开发之前肯定要先将linux系统移植到开发板上。Linux的移植不像Ucos/FreeRTOS那样从官方的SDK包里面找到一个和自己所用芯片一样的工程编译一下,然后下载到开发板上就可以了。Linux的移植要复杂的多,在移植linux之前,需要先移植一个bootloader代码,这个代码用于启动linux内核。bootloader有很多,常用的就是U-boot。移植好u-boot之后,在进行移植linux内核。移植完linux内核后,linux还不能正常启动,需要在移植一个根文件系统(rootfs),根文件系统中包含了一些最常用的命令和文件,所以U-boot、linux kernel和rootfs这三者构成了一个完整的linux系统。正点原子的“移植“不如说是”适配“,因为大部分的移植工作都是NXP厂家完成的,这里的”移植“,只是能让LMX6U-ALPHA开发板可以跑起来。

  • U-boot简介:
    linux系统要启动,必须需要一个bootloader程序,也就是芯片上电以后要先运行一段bootloader程序。这段程序会初始化DDR等外设,任何将linux内核从flash(NAND,NOR FLASH,SD,MMC)等复制到DDR中,最后启动linux内核。Bootloader和linux内核的关系和PC上bios和windows的关系一样,bootloader相当于bios。有很多现成的bootloader软件可以使用,比如u-boot、vivi、Redboot等,其中u-boot使用最为广泛。
    • uboot的全称是universal boot loader,uboot是一个裸机代码,现在的uboot已经支持液晶屏、网络、USB等高级功能。uboot的官网为http://www.denx.de/wiki/oops/U-Boot/ 。
    • 我们一般不用uboot官方的uboot源码,只是官方给半导体厂商准备的,厂商下载uboot源码,然后将自家相应的芯片移植进去,也就是说半导体厂商自己会维持一个版本的uboot,这个uboot相当于他们自己定制的,对自家的芯片支持的很全。
  • Boot操作命令:uboot的本质工作是引导linux,所以uboot肯定有相关的boot(引导)命令来启动linux,常用的与boot相关的命令有:bootz、bootm、和boot。
    • bootz命令:要启动linux,需要先将linux镜像文件复制到DRAM中,如果使用到设备树的话,也需要将设备树复制到DRAM中,可以从EMMC或NAND等存储设备中将linux镜像和设备树文件复制到DRAM,也可以通过nfs或tftp将linux镜像文件和设备树文件下载到DRAM中。然后使用bootz命令进行启动,bootz命令用于自动zImage镜像文件,bootz命令格式如下:
      • bootz[addr[initrd[:size]] fdt]]
        • 命令bootz有三个参数,addr是linux镜像文件在DRAM中的位置,initrd是initrd文件DRAM中的地址,initrd可以使用’-’ 进行代替。fdt就是设备树文件在DRAM中的地址。可以使用网络和EMMC两种方式来启动linux系统。
      • bootm命令:bootm和bootz功能类似,但是bootm用于启动uimage镜像文件,如果不使用设备树启动linux内核的命令如下:bootm addr ;addr是uImage镜像在DRAM中的首地址。
      • boot命令:是用来启动linux系统的,只是boot会读取环境变量bootcmd来启动linux系统,bootcmd(“引导”和”命令“)是一个很重要的环境变量。

你可能感兴趣的:(linux操作系统)