正点原子linux系统移植篇

启动流程

emmc启动:从 EMMC 启动也就是将编译出来的 Linux 镜像文件 zImage 和设备树文件保存在 EMMC,然后uboot读取到这些到DDR内存中去运行,启动内核
 

1、先移植一个bootloader启动linux内核常用的是U-Boot

uboot在启动内核之前,我们还可以对uboot进行操作,要是3秒内没操作默认挂掉进入内核

2、移植内核

3、根文件系统(rootfs),根文件系统中包含了一些最常用的命令和文件

uboot

正点原子官方的uboot编译

编译生成bin文件后

注意要是通过图形优化界面配置了uboot,执行脚本的第一步就会清除配置,要说码源配置就没啥关系

在我们后面的uboot调试时候,一般都是将系统烧写到sd卡中,这样一般是和裸机程序烧写步骤一样

uboot命令的使用

在uboot开始启动的时候,有三秒倒计时,在那个时候按下enter就可以进去uboot设置

1、基础命令2、

 2、内存与网络,命令

nfs可以把开发板与电脑空间共享

3、mmc和文件操作命令

4、NAND和BOO命令

5、boot操作命令

启动linux需要将linux镜像和设备树文件拷贝到DRAM中,可以从 EMMC 或者 NAND 等存储设备中将 Linux 镜像和设备树文 件拷贝到 DRAM,也可以通过 nfs 或者 tftp 将 Linux 镜像文件和设备树文件下载到 DRAM 中。 不管用那种方法,只要能将 Linux 镜像和设备树文件存到 DRAM 中就行ootz 命令用于启动 zImage 镜像文件

uboot源码分析

目录分析

注意:比如board文件里面有很多板子的文件,我们要选择我们需要的模板然后做或者不做适当的修改,不是单单只有一个。

u-boot.bin 编译出来的可执行uboot镜像文件

二、uboot启动流程分析

1、设置cpu为管理模式

2、关看门狗

3、关中断

4、设置时钟频率

5、关mmu,初始化各个bank

6、进入board_init_f()函数(初始化定时器,GPIO,串口,划分内存区域)

7、重定位  复制uboot,然后修改SDRAM上的uboot链接地址

8、清bss

9、跳转到board_init_r函数,启动流程结束

启动内核

bootm加命令行参数

uboot移植实验

重要概念

环境变量 bootcmd

bootcmd 保存着 uboot 默认命令,uboot 倒计时结束以
后就会执行 bootcmd 中的命令。这些命令一般都是用来启动 Linux 内核的,比如读取 EMMC 或
者 NAND Flash 中的 Linux 内核镜像文件和设备树文件到 DRAM 中,然后启动 Linux 内核。可
以在 uboot 启动以后进入命令行设置 bootcmd 环境变量的值。如果 EMMC 或者 NAND 中没有
保存 bootcmd 的值,那么 uboot 就会使用默认的值,板子第一次运行 uboot 的时候都会使用默
认值来设置 bootcmd 环境变量。打开文件 include/env_default.h

bootcmd来判断在emmc还是sd卡或在网络中读取内核镜像和设备树,一个个空间去查找

环境变量 bootargs

bootargs 保存着 uboot 传递给 Linux 内核的参

将 NXP 官方的 uboot 移植到正点 原子的 I.MX6ULL 开发板上,学习如何在 uboot 中添加我们自己的板子

ddr就是开发板的内存,SD卡,mmc就是硬盘

1、添加板子默认配置文件

这个一般在原来的模板上修改

2、添加板子默认头文件

3、添加板子对应板级文件夹

4、修改uboot配置界面

内核移植

一、创建VSCode工程

       1、将NXP官方的linux内核拷贝到Ubuntu。

       2、解压缩tar -vxjf linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2

二、NXP官方开发板Linux内核编译

       编译NXP官方EVK开发板对应的Linux系统,默认配置文件存放路径arch/arm/configs。最终编译出:zImage,和 imx6ull-14x14-evk-emmc.dtb,imx6ull-14x14-evk.dtb。

       将zImage,和 imx6ull-14x14-evk-emmc.dtb拷贝到tftpboot目录下,然后在uboot中通过tftp服务启动。

       经过测试,发现NXP官方开发板对应的zImage和.dtb可以在正点原子开发板上启动。

三、使能8线EMMC

       修改设备树,imx6ull-alientek-emmc.dts。节点usdhc2。

四、网络驱动修改

       为何要一开始就修改网络驱动??在做Linux驱动开发的时候一般都是通过网络调试的。

       修改网络复位IO和PHY ID以后,Linux内核内部通用PHY驱动已经正常工作。

LAN8720的生产厂家是SMSC。使能SMSC驱动,然后重新编译Linux内核,并启动,tftp启动。

三、在Linux中添加自己的开发板

       2、一个就是imx6_alientek_emmc_defconfig默认配置文件。

       3、imx6ull-alientek-emmc.dts编译出来就是.dtb文件。

       复制arch/arm/configs/imx_v7_mfg_defconfig文件为imx_alientek_emmc_defconfig。

       复制arch/arm/boot/dts/imx6ull-14x14-evk.dts文件为imx6ull-alientek-emmc.dts

       修改arch/arm/boot/dts/Makefile,

四、CPU主频和网络驱动修改

       1、修改驱动之前,要先保证板子能够正常启动。

       2、根文件系统处理好,使用现成根文件系统。保证EMMC烧写了系统,设置bootcmd和bootargs。

       Bootcmd设置默认从网络启动,通过TFTP。

Setenv bootcmd ‘tftp 80800000 zImage;tftp 83000000 imx6ull-alientek-emmc.dtb;bootz 80800000 - 83000000;’

       Bootargs设置,根文件系统存放在EMMC的分区2里面,命令如下:

Setenv bootargs ‘console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw’

      

       现在的问题就是EMMC驱动有问题,在imx6ull-alientek-emmc.dts中找到usdhc2节点。将usdhc2改为:

&usdhc2 {

       pinctrl-names = "default", "state_100mhz", "state_200mhz";

       pinctrl-0 = <&pinctrl_usdhc2_8bit>;

       pinctrl-1 = <&pinctrl_usdhc2_8bit_100mhz>;

       pinctrl-2 = <&pinctrl_usdhc2_8bit_200mhz>;

       bus-width = <8>;

       non-removable;

       status = "okay";

};

完了以后编译设备树。使用如下命令:

Make dtbs。

       1、配置主频

超频到696MHz,NXP官方宣传为700MHz。打开imx6ull.dtsi文件,

根文件系统移植

roofs是实际的目录,下面是ubuntu的roofs

一、根文件系统简介

       根文件系统也叫做rootfs。大家学习STM32的W25Q256、SD卡的时候接触过FATFS文件系统。Rootfs?=FATFS。不等于!

       FATFS这类的文件系统属于Linux内核的一部分,属于软件代码。

       那么ROOTFS是什么,根文件系统=“根”、“文件”、“系统”。根文件系统就是一堆的文件、比如软件、配置文件等,这些文件是Linux运行所必须的,将他们组合在一起就构成了跟文件系统。

       根文件系统就是一个“文件夹”,此“文件夹”有很多个文件,这些文件是linux运行所必须的,但是无法放到内核里面去的。比如命令、库、配置文件等等。所有这些软件需要我们自己构建。

       /就是Linux根文件系统。

二、BusyBox构建根文件系统

       构建根文件系统,busybox。还有很多成熟化的根文件系统构建方式,buildroot,yocto。构建的根文件系统调试我们通过nfs网络挂载,也就是跟文件系统存放到ubuntu下,开发板启动以后通过nfs服务使用ubuntu下的跟文件系统。

三、根文件系统初步测试

四、完善根文件系统

五、根文件系统其他功能测试

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值