9| Linux 中断实验 Linux 中断实验不管是裸机实验还是 Linux 下的驱动实验,中断都是频繁使用的功能,在裸机中使用中断我们需要做一大堆的工作,比如配置寄存器,使能 IRQ 等等。Linux 内核提供了完善的中断框架,我们只需要申请中断,然后注册中断处理函数即可,使用非常方便,不需要一系列复杂的寄存器配置。本章我们就来学习一下如何在 Linux 下使用中断。 一、 Linux 中断简介1|Linux 中断 A 2020-09-12 NOTE ARM-Linux 驱动开发篇 Embedded ARM Linux 驱动开发
4| Linux 设备树 Linux 设备树什么是“设备树”,本章我们就来详细的谈一谈设备树。掌握设备树是 Linux 驱动开发人员必备的技能!因为在新版本的 Linux 中,ARM 相关的驱动全部采用了设备树(也有支持老式驱动的,比较少),最新出的 CPU 其驱动开发也基本都是基于设备树的,比如 ST 新出的 STM32MP157、NXP的I.MX8系列等。 我们所使用的Linux版本为4.1.15,其支持设备树,所以 2020-09-11 NOTE ARM-Linux 驱动开发篇 Embedded ARM Linux 驱动开发 dts设备树
5| pinctrl 和 gpio 子系统实验 pinctrl 和 gpio 子系统实验上次我们编写了基于设备树的 LED 驱动,但是驱动的本质还是没变,都是配置 LED 灯所使用的 GPIO 寄存器,驱动开发方式和裸机基本没啥区别。 Linux 是一个庞大而完善的系统,尤其是驱动框架,像 GPIO 这种最基本的驱动不可能采用“原始”的裸机驱动开发方式,否则就相当于你买了一辆车,结果每天推着车去上班。Linux 内核提供了 pinctrl 和 2020-09-11 NOTE ARM-Linux 驱动开发篇 Embedded ARM Linux 驱动开发 dts设备树
7| Linux按键输入驱动实验 Linux按键输入驱动实验1|设备树修改I.MX6U-ALPHA 开发板上的 KEY 使用了 UART1_CTS_B 这个 PIN,打开 imx6ull-lxg-emmc.dts,在 iomuxc 节点的 imx6ul-evk 子节点下创建一个名为“pinctrl_key”的子节点,节点内容如下所示: pinctrl_key: keygrp { fsl,pins = < 2020-09-11 NOTE ARM-Linux 驱动开发篇 Embedded ARM Linux 驱动开发
6| Linux 并发与竞争 Linux 并发与竞争Linux是一个多任务操作系统,肯定会存在多个任务共同操作同一段内存或者设备的情况,多个任务甚至中断都能访问的资源叫做共享资源,就和共享单车一样。 在驱动开发中要注意对共享资源的保护,也就是要处理对共享资源的并发访问。比如共享单车,大家按照谁扫谁骑走的原则来共用这个单车,如果没有这个并发访问共享单车的原则存在,只怕到时候为了一辆单车要打起来了。在 Linux 驱动编写过程中对 2020-09-11 NOTE ARM-Linux 驱动开发篇 Embedded ARM Linux 驱动开发
1| 字符设备驱动开发入门 字符设备驱动开发入门字符设备驱动是Linux 驱动开发中最基础的开始,本章会以一个虚拟的设备为例,讲解如何进行字符设备驱动开发,以及如何编写测试 APP 来测试驱动工作是否正常,为以后的学习打下坚实的基础。 一、字符设备驱动简介字符设备是 Linux 驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节流进行读写操作的设备,读写数据是分先后顺序的。比如我们最常见的点灯、按键、IIC、SP 2020-09-10 NOTE ARM-Linux 驱动开发篇 Embedded ARM Linux 驱动开发
2| LED灯驱动开发实验记录 LED灯驱动开发实验记录一、Linux 下 LED 灯驱动原理Linux 下的任何外设驱动,最终都是要配置相应的硬件寄存器。所以本章的 LED 灯驱动最终也是对 I.MX6ULL 的 IO 口进行配置,与裸机实验不同的是,在 Linux 下编写驱动要符合 Linux的驱动框架。I.MX6U-ALPHA开发板上的LED连接到 I.MX6ULL 的 GPIO1_IO03 这个引脚上,因此本实验的重点 2020-09-10 NOTE ARM-Linux 驱动开发篇 Embedded ARM Linux 驱动开发
3| 新字符设备驱动实验 新字符设备驱动实验经过前两实验的实战操作,我们已经掌握了 Linux 字符设备驱动开发的基本步骤,字符设备驱动开发重点是使用 register_chrdev 函数注册字符设备,当不再使用设备的时候就使用unregister_chrdev 函数注销字符设备,驱动模块加载成功以后还需要手动使用 mknod 命令创建设备节点。 register_chrdev 和 unregister_chrdev 这两 2020-09-10 NOTE ARM-Linux 驱动开发篇 Embedded ARM Linux 驱动开发
内核常用函数 内核常用函数printk 输出信息这里使用了 printk 来输出信息,而不是 printf!因为在 Linux 内核中没有 printf 这个函数。printk 相当于 printf 的孪生兄妹,printf运行在用户态,printk 运行在内核态。在内核中想要向控制台输出或显示一些内容,必须使用printk 这个函数。不同之处在于,printk 可以根据日志级别对消息进行分类,一共有 8 个消 2020-09-10 NOTE ARM-Linux 驱动开发篇 Embedded Linux 驱动开发
10| linux下烧录至SD卡启动 linux下烧录uboot、linux-kernel、dtb、rootfs到SD卡启动[假设识别u盘为设备/dev/sdb] @author:firestaradmin 2020年4月28日19:15:33 0.清除SD卡前1024KB的数据 dd命令(可选步骤)dd if=/dev/zero of=/dev/sdb bs=1024 count=1024 if=文 2020-09-09 NOTE ARM-Linux 环境搭建系统移植篇 Embedded ARM Linux
9| BusyBox根文件系统rootfs构建 根文件系统rootfs构建Linux“三巨头”除了uboot、linux-kernel,就剩最后一个 rootfs(根文件系统)了 这里我们就来学习一下根文件系统的组成以及如何构建根文件系统,这是 Linux 移植的最后一步。根文件系统构建好以后就意味着我们已经拥有了一个完整的、可以运行的最小系统。 以后我们就在这个最小系统上编写、测试 Linux 驱动,移植一些第三方组件,逐步的完善这个最小系统 2020-09-08 NOTE ARM-Linux 环境搭建系统移植篇 Embedded Linux rootfs
8| linux内核移植 linux内核移植一、获取内核源码Linux 官网为 https://www.kernel.org,所以你想获取最新的Linux 版本就可以在这个网站上下载,网站界面如图所示: 从图可以看出最新的稳定版 Linux 已经到了 5.1.4,大家没必要追新,因为 4.x 版本的 Linux 和 5.x 版本没有本质上的区别,5.x 更多的是加入了一些新的平台、新的外设驱动而已。NXP 会从 http 2020-09-07 NOTE ARM-Linux 环境搭建系统移植篇 Embedded Linux
7| uboot移植 uboot移植一、获取ubootuboot官网的源码,对某一芯片的支持肯定没有原厂完善,所以一般选择原厂的uboot源码。 这里我们以 NXP 官方的 uboot 移植到正点原子的 I.MX6ULL 开发板上为例。 uboot官网下载http://www.denx.de/wiki/U-Boot/ 选择源码 ftp下载 选择要下载的版本 从你的板子参考厂商获取修改过的uboot 首先 u 2020-09-06 NOTE ARM-Linux 环境搭建系统移植篇 Embedded Linux uboot
5| Makefile的简单编写 Makefile的简单编写:label:@author:firestaradmin 2020年8月16日15:18:10 基本知识:书写形式 例:foo.o : foo.c defs.h # foo 模块 cc -c -g foo.c 如果命令太长,你可以使用反斜框(‘\’)作为换行符 一般来说,make 会以 UNIX 的标准 Shell,也就是/bin/sh 2020-09-05 NOTE ARM-Linux 环境搭建系统移植篇 Embedded Linux Makefile
6| 裸机程序编译运行 裸机程序编译运行1.编译程序2.烧录程序3.运行程序 其实没什么好说的,就写完程序后,写Makefile、lds、然后编译烧录就完事了。 2020-09-05 NOTE ARM-Linux 环境搭建系统移植篇 Embedded Linux
4| 链接脚本lds的编写 链接脚本.lds说明我们链接代码的时候可以使用如下语句: arm-linux-gnueabihf-ld -Ttext 0X87800000 -o ledc.elf $^ 上面语句中我们是通过“-Ttext”来指定链接地址是 0X87800000 的,这样的话所有的文件都会链接到以 0X87800000 为起始地址的区域。 但是有时候我们很多文件需要链接到指定的区域,或者叫做段里面,比如在 Lin 2020-09-04 NOTE ARM-Linux 环境搭建系统移植篇 Embedded ARM Linux
3| I.MX6UL 启动方式浅析 BOOT启动方式选择I.MX6U 芯片上电以后,芯片会根据 BOOT_MODE[1:0]的设置来选择 BOOT 方式。 通过修改 BOOT_MODE[1:0]对应的 GPIO 高低电平来选择启动方式 串行下载当 BOOT_MODE1 为 0,BOOT_MODE0 为 1 的时候此模式使能,串行下载的意思就是可以通过 USB 或者UART 将代码下载到板子上的外置存储设备中,我们可以使用OTG1这 2020-09-03 NOTE ARM-Linux 环境搭建系统移植篇 Embedded ARM
2| ARM交叉编译器的使用 ARM交叉编译器的使用:label:@author:firestaradmin 2020年8月16日16:52:13 arm-linux-gnueabihf-gcc 编译文件我们是要编译出在 ARM 开发板上运行的可执行文件,所以要使用交叉编译器 arm-linux-gnueabihf-gcc 来编译。 如果使用一个 led.s 源文件,先将 led.s 编译为对应的.o 文件,在终端中输入如 2020-09-02 NOTE ARM-Linux 环境搭建系统移植篇 Embedded ARM Linux
1| 开发环境搭建 一、FTP(File Transfer Protocol)开启 linux下的 FTP 服务sudo apt-get install vsftpd sudo vi /etc/vsftpd.conf 打开 vsftpd.conf 文件以后找到如下两行: local_enable=YES write_enable=YES 确保上面两行前面没有“#”,有的话就取消掉 保存退出后,重启服务 sudo 2020-09-01 NOTE ARM-Linux 环境搭建系统移植篇 Embedded ARM
Makefile的简单编写 Makefile的简单编写:label:@author:firestaradmin 2020年8月16日15:18:10 基本知识:书写形式 例:foo.o : foo.c defs.h # foo 模块 cc -c -g foo.c 如果命令太长,你可以使用反斜框(‘\’)作为换行符 一般来说,make 会以 UNIX 的标准 Shell,也就是/bin/sh 2020-08-16 NOTE Script Embedded Linux Script Makefile