IMX6ULLPRO单独编译kernel+dtb内核模块以及uboot

这篇具有很好参考价值的文章主要介绍了IMX6ULLPRO单独编译kernel+dtb内核模块以及uboot。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

linux开发板启动流程

为什么编译驱动程序之前要先编译内核?

驱动程序要用到内核文件:

编译内核

编译安装内核模块

编译内核模块

安装内核模块到 Ubuntu 某个目录下备用

 安装内核和模块到开发板上

 Bootloader 介绍

编译 u-boot 镜像


linux开发板启动流程

编译自己的dtb文件,arm开发,linux,运维

Reset-->ROM-->bootloader-->kernel+dtb-->rootfs-->APP

为什么编译驱动程序之前要先编译内核?

驱动程序要用到内核文件:

比如驱动程序中这样包含头文件: #include <asm/io.h> ,其中的 asm 是 一个链接文件,指向 asm-arm asm-mips ,这需要先配置、编译内核才会生成 asm 这个链接文件。
编译驱动时用的内核、开发板上运行到内核,要一致:
开发板上运行到内核是出厂时烧录的,你编译驱动时用的内核是你自己编译 的,这两个内核不一致时会导致一些问题。所以我们编译驱动程序前,要把自己 编译出来到内核放到板子上去,替代原来的内核。
更换板子上的内核后,板子上的其他驱动也要更换:
板子使用新编译出来的内核时,板子上原来的其他驱动也要更换为新编译出 来的。所以在编译我们自己的第 1 个驱动程序之前,要先编译内核、模块,并且放到板子上去。

编译内核

不 同 的 开 发 板 对 应 不 同 的 配 置 文 件 , 配 置 文 件 位 于 内 核 源 码 arch/arm/configs/目录。 kernel 的编译过程如下:
make mrproper
make 100ask_imx6ull_defconfig
make zImage -j4
make dtbs

cp arch/arm/boot/zImage /home/book/nfs_rootfs

cp arch/arm/boot/dts/100ask_imx6ull-14x14.dtb  /home/book/nfs_rootfs
编译完成 zImage 后才可编译设备树文件。 编译自己的dtb文件,arm开发,linux,运维
编译完成后生成的文件如图 5.2 所示:
编译自己的dtb文件,arm开发,linux,运维
编译完成后,在 arch/arm/boot 目录下生成 zImage 内核文件 , 在 arch/arm/boot/dts 目录下生成设备树的二进制文件 100ask_imx6ull- 14x14.dtb 。把这 2 个文件复制到 /home/book/nfs_rootfs 目录下备用,如图 5.3:
编译自己的dtb文件,arm开发,linux,运维

编译安装内核模块

编译内核模块

进入内核源码目录后,就可以编译内核模块了
make ARCH=arm CROSS_COMPILE-arm=buildroot-linux-gnueabihf-modulese
内核模块编译完成后如图
编译自己的dtb文件,arm开发,linux,运维

安装内核模块到 Ubuntu 某个目录下备用

可以先把内核模块安装到 nfs 目录 (/home/book/nfs_rootfs)
执行以下命令安装模块:
sudo make ARCH=arm INSTALL_MOD_PATH=/home/book/nfs_rootfs modules_install
把模块安装在 nfs 目录“ /home/book/nfs_rootfs/ ”下:
编译自己的dtb文件,arm开发,linux,运维

 安装好驱动后的/home/book/nfs_rootfs/目录结构如图 5.6 所示:

编译自己的dtb文件,arm开发,linux,运维

 安装内核和模块到开发板上

假设:在 Ubuntu /home/book/nfs_rootfs 目录下,已经有了 zImage 、 dtb 文件,并且有 lib/modules 子目录 ( 里面含有各种模块 )
接下来要把这些文件复制到开发板上。假设 Ubuntu IP 192.168.5.11 , 在开发板上执行以下命令:
mount -t nfs -o nolock,vers=3 192.168.5.11:/home/book/nfs_rootfs/ /mnt
cp /mnt/zImage /boot
cp /mnt/100ask_imx6ull-14x14.dtb /boot
cp /mnt/lib/modules /lib -rfd
sync //同步
lsmod //查看内核模块

编译自己的dtb文件,arm开发,linux,运维

 Bootloader 介绍

Bootloader 是在操作系统运行之前运行的一段代码,用于引导操作系统。
通常每个操作系统都有一组专属的引导加载程序。引导加载程序通常可以通过多
种方式引导操作系统内核,还有各种命令用于调试或修改内核运行环境。
U-Boot 是一个开源的主引导加载程序,用于引导设备的操作系统内核,并
含有多种命令以便调试系统。它适用于多种计算机体系结构,包括 68k ARM
Blackfin MicroBlaze MIPS Nios SuperH PPC RISC-V x86
U-boot 官网:
https://www.denx.de/wiki/U-Boot
源码下载页面:
http://ftp.denx.de/pub/u-boot/
NXP 官方 uboot 源码 Git 地址:
https://source.codeaurora.org/external/imx/uboot-imx
本开发使用的 U-boot 位于 Git 仓库,地址为:
https://e.coding.net/weidongshan/imx-uboot2017.03.git
注意 我们使用的版本针对板子进行过修改, u-boot 官网下载的源码不能直接使用。

编译 u-boot 镜像

不同的开发板对应不同的配置文件,配置文件位于 u-boot 源码的 “configs/ ”目录。对于 IMX6ULL Pro 版, u-boot 的编译过程如下 ( 编译 uboot 前必须先配置好工具链等开发环境)
cd /home/book/100ask_imx6ull-sdk
book@100ask: ~/100ask_imx6ull-sdk$cd Uboot-2017.03
book@100ask: ~/100ask_imx6ull-sdk/Uboot-2017.03$ make distclean
book@100ask: ~/100ask_imx6ull-sdk/Uboot-2017.03$ make mx6ull_14x14_evk_defconfig 
book@100ask: ~/100ask_imx6ull-sdk/Uboot-2017.03$ make -j4
6.1 编译镜像文件为具体的执行步骤:
编译自己的dtb文件,arm开发,linux,运维

编译完成后生成的文件如图 6.2 所示。

编译自己的dtb文件,arm开发,linux,运维 编译完成之后生成 u-boot-dtb.imx,可以烧在 TF 卡、EMMC 上。以下命令是将

u-boot-dtb.imx 文件烧写到 EMMC 上:
cp u-boot-dtb.imx /home/book/nfs_rootfs
 cp /mnt/u-boot-dtb.imx  .
echo 0 > /sys/block/mmcblk1boot0/force_ro //取消读写保护
dd if=u-boot-dtb.imx of=/dev/mmcblk1boot0 bs=512 seek=2
echo 1 > /sys/block/mmcblk1boot0/force_ro //恢复读写保护

编译自己的dtb文件,arm开发,linux,运维文章来源地址https://www.toymoban.com/news/detail-815727.html

到了这里,关于IMX6ULLPRO单独编译kernel+dtb内核模块以及uboot的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenCV交叉编译—arm(imx6ull,Cortex-A7)

    opencv - 4.2.0(opencv4.5.4版本在交叉编译时会报错) Ubuntu - 20.04 64位 gcc version 4.9.4 (Linaro GCC 4.9-2017.01) arm板:imx6ull, Cortex - A7 内核挂载:nfs+SecureCRT 1、下载 2、选择路径 根据自己Ubuntu来下载,下载完以后复制到自己要安装的路径,也可以不移动。 完成以后使用命令解压: 3、解压

    2024年02月06日
    浏览(44)
  • imx6ull开发板环境配置 - libusb、libudev、eudev交叉编译

    目录 零、前言 一、libusb交叉编译 1.0 前言 1.1 交叉编译 二、usbutils交叉编译 2.0 前言 2.1 交叉编译 三、libudev交叉编译 3.0 前言 3.1 交叉编译 3.2 错误处理-没找到usbutils 3.3 错误处理-没找到pci.ids (pci.ids not found) 3.3.0 前言 3.3.1 查找pci.ids 3.3.2 继续编译 3.4 错误处理-没找到gperf (

    2024年02月10日
    浏览(32)
  • iMX6ULL 库移植 | Libgpiod 库的交叉编译及使用指南(linux)

    GPIO口的操作,是很常见的功能。传统的GPIO sysfs接口已被弃用。自Linux 4.8起,内核提供了全新的操作gpio的方式libgpiod(C library and tools for interacting with the linux GPIO character device),当然也更高效,推荐使用。 libgpiod - 用于与Linux GPIO字符设备进行交互的C库和工具(gpiod代表GPIO设备

    2024年02月10日
    浏览(39)
  • 【IMX6ULL驱动开发学习】02.IMX6ULL烧写Linux系统

    由于我买的是正点原子的IMX6ULL阿尔法开发板,但是我是看韦东山老师视频学习的驱动 所以这里我烧录的方法是按照韦东山老师的课程来的 这里给出烧写Linux系统用到的工具 链接:https://pan.baidu.com/s/1bD-xxn3K8xQAVkJSaJmTzQ 提取码:af6w 下载解压后,可以看到烧写工具 烧写Linux系统

    2024年02月13日
    浏览(59)
  • iMX6ULL驱动开发 | 让imx6ull开发板支持usb接口FC游戏手柄

    手边有一闲置的linux开发板iMX6ULL一直在吃灰,不用来搞点事情,总觉得对不住它。业余打发时间就玩起来吧,总比刷某音强。从某多多上买来一个usb接口的游戏手柄,让开发板支持以下它,后续就可以接着在上面玩童年经典游戏啦。  我使用的是正点原子的I.MX6U-ALPHA 开发板,

    2024年02月14日
    浏览(54)
  • 【IMX6ULL驱动开发学习】08.IMX6ULL通过GPIO子系统函数点亮LED

    通过GPIO子系统函数点亮LED 1、GPIO子系统函数 1.1 确定 led 的GPIO标号,查看内核中的gpiochip 查看 gpiochip ,以正点原子的IMX6ULL阿尔法开发板为例 查看原理图,发现led接的引脚是 GPIO1_IO3,对应 /sys/kernel/debug/gpio 中的 gpiochip0 组,gpiochip0 组从0开始算起, 所以 GPIO1_IO3 对应的标号就

    2024年02月10日
    浏览(78)
  • 【IMX6ULL驱动开发学习】22.IMX6ULL开发板读取ADC(以MQ-135为例)

    IMX6ULL一共有两个ADC,每个ADC都有八个通道,但他们共用一个ADC控制器 在imx6ull.dtsi文件中已经帮我们定义好了adc1的节点部分信息 注意 num-channels = 2; ,这个表示指定使用ADC1的两个通道,即通道1和通道2 如果你要使用多个ADC通道,修改这个值即可 配置ADC引脚的 pinctrl ,在自己的

    2024年02月12日
    浏览(63)
  • 【IMX6ULL驱动开发学习】05.IMX6ULL驱动开发_编写第一个hello驱动【熬夜肝】

    经过以下四个步骤,终于可以开始驱动开发了 01.安装交叉编译环境【附下载地址】 02.IMX6ULL烧写Linux系统 03.设置IMX6ULL开发板与虚拟机在同一网段 04.IMX6ULL开发板与虚拟机互传文件 一、获取内核、编译内核 二、创建vscode工作区,添加内核目录和个人目录 三、了解驱动程序编写

    2024年02月06日
    浏览(52)
  • IMX6LL|时钟控制

    4个层次配置芯片时钟 晶振时钟 PLL与PFD时钟 PLL选择时钟 根时钟/外设时钟 系统时钟来源 RTC时钟源:32.768KHz,连接RTC模块,进行时间计算。 系统时钟:24MHz,芯片主晶振 7路锁相环电路 ARM_PLL:驱动 ARM 内核 528_PLL:倍频参数固定为22,系统总线时钟 USB1_PLL:驱动第一个 USB 物理

    2024年01月19日
    浏览(31)
  • IMX6LL|内核模块

    作用 解决linux内核可扩展性和可维护性相对较差的缺陷 现代内核派系 宏内核:关键功能和服务功能均在内核空间提供 运行效率高 扩展性较差 微内核:内核空间只提供关键功能,服务功能在用户空间提供 运行效率较低 安全性、扩展性较高 内核模块加载/卸载 使用insmod命令加

    2024年01月20日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包