• 正文
    • 获取NXP内核源码
    • 添加ElfBoard配置文件
  • 相关推荐
申请入驻 产业图谱

飞凌嵌入式ElfBoard ELF 1板卡-开发板适配之移植前的准备

7小时前
76
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

我们这一章节,开始进行Linux内核源码的移植,主要的工作是在NXP i.MX6ULL EVK评估板对应的Linux内核源码(linux-imx_4.1.15版本)基础上进行功能接口引脚适配,以适应ELF 1开发平台。

获取NXP内核源码

在ELF 1的资料包当中已经提供了下载好的NXP原厂sdk: ELF 1开发板资料包7-NXP 原厂资料7-1 NXP官方源码linux-imx-imx_4.1.15_2.0.0_ga.tar.bz2

将NXP官方源码复制到开发环境/home/elf/work/目录下,解压缩:

elf@ubuntu:~/work$ tar jvxf linux-imx-imx_4.1.15_2.0.0_ga.tar.bz2

elf@ubuntu:~/work$ cd linux-imx-imx_4.1.15_2.0.0_ga/

进入该路径后查看文件如下:

添加ElfBoard配置文件

添加编译默认配置文件

将arch/arm/configs路径下的imx_v7_mfg_defconfig复制一份,命名为imx6ull_elf1_defconfig,命令如下:

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ cp arch/arm/configs/imx_v7_mfg_defconfig arch/arm/configs/imx6ull_elf1_defconfig

添加ElfBoard的设备树

复制一份imx6ull-14x14-evk.dts,命名为imx6ull-elf1-emmc.dts作为我们ELFBoard的设备树,命令如下:

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ cp arch/arm/boot/dts/imx6ull-14x14-evk.dts arch/arm/boot/dts/imx6ull-elf1-emmc.dts

将imx6ull-elf1-emmc.dts添加到Makefile,打开arch/arm/boot/dts/Makefile,找到CONFIG_SOC_IMX6ULL,添加我们刚刚创建的设备树。

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ vi arch/arm/boot/dts/Makefile

建立交叉编译脚本

前面章节已经讲过内核的编译步骤,参考6.3节 内核编译

建立一个编译脚本build.sh:

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ vim build.sh

然后在此脚本中加入以下内容,保存退出:

#!/bin/bash

export CPUS=`grep -c processor /proc/cpuinfo`

source /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi

make distclean

make imx6ull_elf1_defconfig

make -j${CPUS}

 

rm -rf ./.tmp

make modules_install INSTALL_MOD_PATH=./.tmp/rootfs/

cd .tmp/rootfs/

tar -jcvf modules.tar.bz2 *

注意:将上面的内容复制到开发环境中可能会存在格式问题,正确格式内容如下图所示,请参考下图进行调整:

给脚本可执行权限:

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ chmod u+x build.sh

编译

执行build.sh脚本进行编译

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ ./build.sh

编译完成后,在arch/arm/boot/目录下会生成zImage文件。

单步更新

测试编译出的镜像之前需要先把镜像烧录到开发板中,单独烧录内核镜像只需要把zImage镜像拷贝到开发板中的/run/media/mmcblk1p1目录下即可。

此处讲解两种单独烧录zImage文件的方法。两种方法是为了我们调试内核方便,不必每次都执行整个烧写过程。

(一)U盘方式

将源码目录下生成的zImage文件拷贝到U盘中,然后再把U盘插到开发板的usb接口,这时U盘会挂载到/run/media/sda1目录下,输入如下命令即可拷贝到开发板的/run/media/mmcblk1p1目录下。

root@ELF1:~# cp /run/media/sda1/zImage /run/media/mmcblk1p1/

(二)scp方式

后续需要频繁验证内核和设备树是否修改成功,所以需要将镜像拷贝到开发板中。如果每次都使用U盘拷贝,效率很低,所以我们采用scp的方式将编译出的镜像拷贝到开发板。

scp是secure copy的缩写,scp是linux系统下基于 ssh 登陆进行安全的远程文件拷贝命令。故使用scp命令需要保证虚拟机能够通过ssh连接到开发板。

首先修改开发板中的/etc/network/interfaces文件设置开发板ip,保证能够与开发环境互相ping通。address和gateway都需要根据实际情况修改。

root@ELF1:~# vi /etc/network/interfaces

重启网络服务:

root@ELF1:~# /etc/rc5.d/S01networking  restart

ping一下开发环境的IP地址,保证能够ping通:

此时将编译出的内核拷贝到开发板

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ scp arch/arm/boot/zImage root@172.16.0.175:/run/media/mmcblk1p1/

其中,arch/arm/boot/zImage表示源文件路径,root@172.16.0.175:/run/media/mmcblk1p1/表示目标路径为开发板的内核所在分区的挂载路径/run/media/mmcblk1p1/

首次通过scp拷贝时,会提示是否要建立连接,输入yes即可

拷贝完成后效果如下:

接下来使用同样的方式将设备树拷贝到开发板:

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ scp arch/arm/boot/dts/imx6ull-elf1-emmc.dtb root@172.16.0.175:/run/media/mmcblk1p1/

进行sync操作后重启开发板:

验证刚才编译的内核是否能正常启动,通过查看内核编译时间可以看出内核是否替换成功。

注意:在使用scp命令拷贝时可能遇到如下问题,这是由于ssh的公钥信息改变导致,可以通过删除ssh连接记录解决。

解决方法:删除当前用户路径下的.ssh/known_hosts,然后重新复制

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ rm /home/elf/.ssh/known_hosts

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ scp arch/arm/boot/zImage root@172.16.0.175:/run/media/mmcblk1p1/

相关推荐