目录
[1.1 Linux驱动的实质:](#1.1 Linux驱动的实质:)
[1.3 arm与其他单片机的对比](#1.3 arm与其他单片机的对比)
[4. imx6ull硬件资源](#4. imx6ull硬件资源)
一、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.文件系统阶段
- 执行 init 进程
- 启动配置文件 /etc/inittab
- 运行 /etc/init.d/rcS 脚本
- 挂载 /etc/fatab 文件
- 启动终端( 乌班图中进入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中了