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中了

相关推荐
zcmodeltech9 分钟前
智能矿井沙盘模型多系统协同控制系统设计:基于STM32与Modbus RTU的感知-传输-控制一体化方案
服务器·数据库·分布式·stm32·单片机·嵌入式硬件
江湖有缘20 分钟前
Docker实战 | 使用Docker部署Donetick任务与家务管理应用
运维·docker·容器
实心儿儿29 分钟前
Linux —— 应用层协议HTTP
linux·网络·http
流星白龙33 分钟前
【Docker】4.NameSpace空间隔离实战
java·运维·docker
有续技术1 小时前
哈斯 (Haas) 机床 IP、端口号配置内容总结
运维·服务器
小张同学a.1 小时前
LAMP架构2
linux·运维·网络·架构·负载均衡
千河殇 多想和她2 小时前
如何在Reaonix中使用CodeGraph以及CodeGraph效果实测经验分享
linux·运维·ubuntu
VortMall2 小时前
出海引流运维双升级|VortMall微服务商城系统v1.3.12 升级更新
运维·微服务·facebook
心念枕惊2 小时前
新写了个直播录制工具,可录制抖音快手斗鱼直播
运维·服务器·数据库
躺不平的理查德2 小时前
CMAKE备忘录
linux·运维·服务器