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

相关推荐
小夏子_riotous2 小时前
openstack的使用——5. Swift服务的基本使用
linux·运维·开发语言·分布式·云计算·openstack·swift
学Linux的语莫2 小时前
Hyper-V的安装使用
linux·windows·ubuntu·hyper-v
IMPYLH2 小时前
Linux 的 numfmt 命令
linux·运维·服务器·bash
proware2 小时前
海思3403与3559安全启动
linux·安全·tee
sunz_dragon2 小时前
Claude Code / Codex Git 版本管理完整使用指南
服务器·人工智能
领尚2 小时前
openclaw 极简安装(Ubuntu 24.04 server)
linux·运维·ubuntu
Gofarlic_OMS2 小时前
Windchill的license合规使用报告自动化生成与审计追踪系统
大数据·运维·人工智能·云原生·自动化·云计算
迷途之人不知返2 小时前
shell相关知识与Linux权限
linux
SPC的存折3 小时前
3、主从复制实现同步数据过滤
linux·运维·服务器