Linux驱动编程1:imxull上移植Linux系统

目录

一、Linux驱动介绍

[1.1 Linux驱动的实质:](#1.1 Linux驱动的实质:)

1.2学习目标

[1.3 arm与其他单片机的对比](#1.3 arm与其他单片机的对比)

二、在开发板上移植Linux系统

1.系统移植概念

2.与裸机的区别:

3.驱动程序的介绍

[4. imx6ull硬件资源](#4. imx6ull硬件资源)

5.启动流程:

6.模式三环境配置

三、重点总结

1.烧写哪些文件?

2.三种移植Linux方法:


一、Linux驱动介绍

1.1 Linux驱动的实质

  • 把裸机驱动的内容放到Linux系统中,在Linux大型源代码框架之下做开发(即基于Linux内核做开发),与Linux代码相结合,让外设更简单地启动

1.2学习目标

  • **阅读和分析源代码框架的能力:**Linux内核代码量很大,需要在内核里找函数定义及传参形式,需要C语言基本功比较好
  • 工程管理工具的使用:Makefile
  • linux系统操作的能力:apt-get工具集,网络配置
  • C++面向对象编程思想的培养、设计模式的思想(生产者消费者模型,桥接模式)
  • arm裸机开发
  • 驱动调试的能力:万用表,逻辑分析仪,示波器等等的使用
  • 复习之前所学内容:Linux驱动是一个综合性的学习过程

1.3 arm与其他单片机的对比

芯片类型 资源 学习重点
51单片机 内存:256字节 外存:4k/8k 最小系统:电源电路、晶振电路、复位电路
32单片机 内存:4k 外存:64k 标准库开发
ARM裸机:imx6ull 内存:512M DDR 外存:SD卡/ 8G EMMC 1.启动流程、寄存器开发 2. 时钟系统:24MHz系统时钟->PLL倍频->PLD分频(因为要匹配低速外设) 3.中断系统:中断向量表,中断如何配置 4.外设:GPIO,timer/pwm,UART,i2c,SPI,RGBLCD
ARM驱动:imx6ull 内存:512M DDR 外存:SD卡/ 8G EMMC 1.移植Linux操作系统 * 可实现任务调度 * 协议栈:网络协议栈,USB协议栈,CAN等等 * 文件系统 * 进程间通信 * 设备管理(哪些在用哪些没在用) 2.软(硬)件裁剪:需要的功能加上去不需要的去掉 3.外设驱动的适配与验证:基于原厂驱动改写 * 字符设备驱动编写

二、在开发板上移植Linux系统

1.系统移植概念

Linux 系统想要移植到开发板上,我们需要移植三部分: U-Boot ( bootloader )、 zImage (内核镜像)、rootfs (文件系统),我们需要将其烧写到开发板的存储器中,这个过程称为 系统移植 。

  • U-Boot(Universal Boot Loader)是嵌入式系统中广泛使用的开源引导加载程序,其核心功能是为操作系统内核的启动提供硬件初始化、镜像加载及参数传递等支持。
  • zImage 是Linux操作系统的内核镜像文件,内核可以理解为一个软件,具备管理处理器、内存管理、硬件设备管理、进程调度、网络通信等功能。
  • rootfs是Linux系统运行的基础,可以提供管理文件资源,与用户进行操作交互等功能。

2.与裸机的区别:

  • 烧写工具不同

|------|------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| | 裸机 | 驱动 |
| 烧写工具 | imxdownload | |
| 烧写程序 | bin->.imx | * boot loader * Linux内核 * rootfs根文件系统 |
| 烧写方式 | SD卡。每次烧写都要拔下来插上去 | 方式一:烧到SD卡------换板子方便,适合质检 方式二:烧到EMMC------方便设备独立工作 方式三:网络挂载------方便开发 * uboot烧到SD卡,选择SD卡启动 * zimage 、.dtb通过tftp下载。地址------/home/linux/tftpboot * rootfs通过nfs挂载。地址------/home/linux/nfs/rootfs |

3.驱动程序的介绍

|-------------|-----------------------------|-------------------------------------------|------------------------------------------------------------|
| 驱动程序类型 | 概念 | 作用 | 要烧写的文件 |
| boot loader | 一段加载引导系统启动的裸机代码(.bin文件) | 为加载执行内核做前期的准备 * 初始化栈指针 * 初始化DDR * 初始化其他外设 | u-boot.imx |
| Linux内核 | 纯C语言编写的软件程序 | * 内存管理 * 多任务管理 * 进程间通信 * 网络协议 * 文件系统管理 | zImage:压缩后的内核文件 imx6ull-alientek-emmc.dtb:设备树文件,描述硬件平台资源信息 |
| rootfs | 根文件系统 | 实现用户层与内核层交互、对文件系统管理和操作 | rootfs.tar.gz |

注意:
imx6ull-alientek-emmc.dtbs 是 Linux 内核运行所需要的设备树文件,记录不同硬件平台的资源信息
文件。 Linux3.x 版本内核以前,此部分包含在 zImage 中, Linux3.x 版本内核以后,该信息被独立出
来称为设备树文件。

4. imx6ull硬件资源

5.启动流程:

1.选择SD卡启动

2.开发板上电:

1.执行0x0位置的代码 96KB BOtROM空间在(片内128KSRAM来执行的)

2.查看启动方式(1.USB启动、2.SD卡启动、3.EMMC启动、4.NAND启动) 为SD卡启动

3.到SD卡中找uboot.imx(uboot.bin+DCD表头: 时钟寄存器配置+DDR寄存器配置)

4.将uboot.bin搬移到DDR中来运行

5.关闭看门狗、关闭Dcache、初始化串口、始化网口、.. uboot自搬移过程

6.uboot进入人机交互阶段

7.倒计时等待用户输入

8.用户没有输入则执行bootcmd

9.bootcmd中tftp下载 zImage 80800000地址 下载 dtb文件83000000地址,使用bootz加载引导内核启动

3.内核启动阶段

1.挂载 文件系统,如果没有文件系统会kernel panic

2.根据uboot中的bootargs 来挂载文件系统

4.文件系统阶段

  1. 执行 init 进程
  2. 启动配置文件 /etc/inittab
  3. 运行 /etc/init.d/rcS 脚本
  4. 挂载 /etc/fatab 文件
  5. 启动终端( 乌班图中进入minicom就和乌班图终端一样)

6.模式三环境配置

1.双网卡网络配置

  • 和开发板连通
  • 下载软件
  • 开发板需要上网

2.双网卡转发设置

3.apt-get源配置

4.minicom配置 : minicom是开发板的串口调试助手

5.tftp服务器配置

6.nfs股务器配

三、重点总结

1.烧写哪些文件?

  • uboot
  • zImage
  • . dtb
  • rootfs

2.三种移植Linux方法:

1.烧录到SD卡上

2.烧录到EMMC上

3.模式三:

1.使用uboot烧录SD卡上

2.选择SD卡启动

3.执行uboot

4.倒计时时间到后默认执行bootemd

5.tftp 80800000zImage;tftp 83000000 imx6u11-alientek-emmc.dtb:bootz 80800000- 83000000

6.bootargs对内核传参,设定文件系统路径

7.执行内核,内核根据bootargs参数找文件系统

8.找到服务器rootfs 文件系统

9.正常启动进入文件系统的shel1中了

相关推荐
johnny2333 小时前
运维管理面板:AcePanel、OpenOcta、DeepSentry
运维
青梅橘子皮3 小时前
Linux---基本指令
linux·运维·服务器
REDcker4 小时前
Linux信号机制详解 POSIX语义与内核要点 sigaction与备用栈实践
linux·运维·php
cui_ruicheng5 小时前
Linux进程间通信(三):System V IPC与共享内存
linux·运维·服务器
蚰蜒螟5 小时前
深入 Linux 内核同步机制:从 futex 到 spinlock 的完整旅程
linux·windows·microsoft
运维全栈笔记5 小时前
Linux安装配置Tomcat保姆级教程:从部署到性能调优
linux·服务器·中间件·tomcat·apache·web
dllmayday6 小时前
Linux 上用终端连接 WiFi
linux·服务器·windows
ACP广源盛139246256736 小时前
IX8024与科学大模型的碰撞@ACP#筑牢科研 AI 算力高速枢纽分享
运维·服务器·网络·数据库·人工智能·嵌入式硬件·电脑
峥无7 小时前
Linux系统编程基石:静态库·动态库·ELF文件·进程地址空间全景图
linux·运维·服务器
用户2367829801687 小时前
从 chmod 755 说起:Unix 文件权限到底是怎么算的?
linux