ARM裸机基础编程
基于“韦东山”老师的新一期教程,在“S3C2440”开发板实现硬件编程与基本驱动开发、APP应用编程
ZMK_02
talk is cheap, show me your code!
展开
-
在Ubuntu、i.mx6ull开发板下挂载NTFS文件系统
一、写在前面什么是NTFS文件系统呢?引自百科的回答如下NTFS(New Technology File System)是Windows NT内核的系列操作系统支持的、一个特别为网络和磁盘配额、文件加密等管理安全特性设计的磁盘格式,提供长文件名、数据保护和恢复,能通过目录 和文件许可实现安全性,并支持跨越分区暂且知道这个fs是在window下使用的,但是Linux系统并不支持该格式的fs。那有什么方法支持NTFS呢? 安装NTFS-3G,它的概念如下NTFS-3G is an open原创 2020-06-04 16:08:08 · 492 阅读 · 0 评论 -
Part19:LCD驱动程序
1 代码实现/* from pxafb.c */static inline unsigned int chan_to_field(unsigned int chan, struct fb_bitfield *bf){ chan &= 0xffff; chan >>= 16 - bf->length; return chan << bf->of...原创 2020-05-05 17:45:27 · 223 阅读 · 0 评论 -
Part18: LCD的裸板编程
0 写在前面本应先讲述LCD工作原理的,但为了脑海中有个框架性、目的性,事先讲解整个框架,然后再次基础上不断完善。在完善过程中,遇到需要理解LCD原理时,再补充说明即可。我觉得,下面的框架值得好好学习(这其实也是“输入子系统”的缩影),还有面向对象的编程方式(封装、抽象)讲解顺序:框架的搭建从上到下,框架的实现从下到上 备注:下面的LCD裸板编程基于s3c2440这款开发板,只是硬件有...原创 2020-05-04 17:42:52 · 364 阅读 · 0 评论 -
Part17: 触摸屏驱动程序(基于输入子系统实现)
1 基本框架头文件:s3c_ts.h#ifndef _S3C_TS_H#define _S3C_TS_H#include <linux/errno.h>#include <linux/kernel.h>#include <linux/module.h>#include <linux/gpio.h>#include <linux/...原创 2020-05-02 12:46:41 · 365 阅读 · 0 评论 -
Part16-用platform总线实现led点灯
0 platform总线介绍>> 从Linux2.6内核起,引入一套新的驱动管理和注册机制:platform总线。相对于USB、PCI、I2C、SPI等物理总线来说, platform总线是一种虚拟、抽象出来的总线,实际中并不存在这样的总线。 >> platform总线将“设备相关硬件操作”与“驱动程序”分离,因为硬件相关操作差异大,而驱动程序较稳定。这样分离...原创 2020-05-01 21:04:23 · 344 阅读 · 0 评论 -
Part15: 内核的输入子系统(input-subsystem)【待完善】
0 明确输入子系统组成、目的对于内核的输入子系统,网上一堆文章。但是很少提及到输入子系统的目的何在?此外,输入子系统三大层之间的划分缘由?(网上很多只是介绍是什么,而没提及分层的目的)因此,在讲解之前,先阐明以上两点。1)输入子系统的目的 站在三个角度考虑: 1.1)站在设备驱动程序角度 设备驱动程序的目的很简单,它只想轻松融入进内核贡献它自己对硬件的操作功能,另外,它肯定不想 与...原创 2020-04-30 21:39:08 · 254 阅读 · 0 评论 -
阶段总结二:Part8-Part14知识梳理、总结
0 回顾起初的目标① 掌握裸机重定位(这有助于后续理解u-boot)② 掌握裸机中断处理流程③ 掌握Linux异常、中断处理体系④ 编写Linux下的按键驱动程序⑤ 掌握Linux中驱动和应用程序的交互方式:查询、中断-唤醒、poll、异步通知下面我以这5点,概括梳理对应的知识点1 知识梳理对于前5个目标,我想以“思维导图”的方式展开,如下图备注:忽略了一些知识点的展开,并概括...原创 2020-04-28 21:18:31 · 130 阅读 · 0 评论 -
Part14: 按键中断与定时器
Part14: 按键中断与定时器0 明确硬件中断处理1 按键中断处理程序1.0 设置中断入口1.1 CPU使能总中断1.2 中断源初始化1.3 中断控制器初始化1.4 中断处理函数2 定时器实现LED计数2.1 时钟初始化2.2 时钟中断处理函数0 明确硬件中断处理对于s3c2440开发版,查手册可获得如下图上图不方便注释寄存器的用途,在此从中断源–>中断寄存器–>CPU详细说...原创 2020-04-28 16:15:23 · 922 阅读 · 0 评论 -
Part13:按键驱动程序的不同实现(查询/中断/poll/异步通知/同步互斥阻塞)
0 写在前面part12文章是对ARM架构下Linux内核的异常(中断)处理体系结果的原理讲述,有了这些基本的认识后,下面根据不同实现方式实现按键驱动程序的编写。主要内容如下:查询——霸占CPU资源中断——说明一点:下面的实现不会贴全部代码,代码可从https://blog.csdn.net/qq_42800075/article/details/105670841获取1 按键驱动...原创 2020-04-24 21:38:28 · 251 阅读 · 0 评论 -
Part12:内核异常(中断)处理体系结构(基于2.6.22.6内核)
1 异常处理体系结构异常的处理体系初始化由两个函数完成:trap_init() 和 init_IRQ()因为中断是异常的一种,且不同板子的中断设置不同,因此有个单独的初始化函数init_IRQ()下面先看看trap_init 如何完成“异常”的初始化,并搭建异常整个处理体系。trap_init的主要工作就是复制“异常向量”到0xffff,0000 且复制异常向量的处理函数到0xffff,...原创 2020-04-23 15:21:29 · 145 阅读 · 0 评论 -
ARM裸机与驱动编程代码集合(在s3c2440实现)
写了两天,将前面部分所有代码自己写了一遍,中途遇到一些bug,我觉得有必要记录下来后面我会继续完善这篇文章,有很多补充待完成…前面11部分的代码截图如下获取的百度网盘链接地址:链接:https://pan.baidu.com/s/1M13-J4Z2AOw5yZLUMDrsaA提取码:7x1f以上所有代码都经过测试,有运行结果图。测试环境:Ubuntu16.04 LTS板子: S...原创 2020-04-21 23:33:55 · 304 阅读 · 0 评论 -
Part11: 异常与中断
1.ARM的7种模式、2种状态对于异常与中断的概念,不难理解,中断属于异常,但两者都是不可预见的。对于ARM的中断/异常的使用过程,看下图备注:下面的程序就是根据这样的主线编程,这也是这篇文章的核心。OK,那ARM下有哪些模式呢? 如下图所示补充:CPSR:Current program status register 当前程序状态寄存器SPSR:Store program s...原创 2020-04-19 23:45:15 · 139 阅读 · 0 评论 -
Part10: 代码重定位与位置无关码
1 代码重定位什么是代码重定位呢?来一个例子,对于S3C2440这款开发板,Nor Flash可以直接读,但不能直接写(可通过代码验证,此处忽略)。但是如果要写的话,如何实现?这时候就要用“代码重定位”了。有两个办法,一是重定位需写的数据到SDRAM 二 是重定位整个程序到SDRAM下面依次讲解这两个方法。1.1 重定位需写的数据到SDRAM直接上代码,再解释。如下char ...原创 2020-04-18 22:52:42 · 443 阅读 · 0 评论 -
Part9:内存控制器与SDRAM硬件编程
Part9: 内存控制器与SDRAM硬件编程1 内存接口的概念2 不同位宽芯片的地址连接3 内存访问时序图4 SDRAM原理及硬件编程1 内存接口的概念以s3c2440为例,看下面该开发板的内存接口图竟然Nor Flash、网卡、SDRAM(内存)、GPIO、UART这些是统一编址,那有没有“独立编址”的呢?答:有的,nand flash就是一个典例,它不参与CPU的统一编址,看下图...原创 2020-04-17 22:14:52 · 270 阅读 · 0 评论 -
Part8:S3C2440时钟体系结构
1 硬件时钟体系S3C2440的时钟体系很好理解,记住两点:1. 三大部分:CPU 、高速设备、低速设备分别对应内部BUS、AHB BUS(H:高速)、APB BUS (P:外设) 这三条总线的时钟源分别为 FCLK、HCLK、PCLK,最大值依次为:400Mhz、136Mhz、68Mhz 但是,S3C2440使用的是12Mhz的晶振,如何放大的呢? -----> 锁相环PPL,具...原创 2020-04-16 14:10:20 · 173 阅读 · 0 评论 -
阶段总结一:Part1-Part7知识梳理、总结
阶段总结一:Part1-Part7知识梳理Part 1~7要求掌握的知识/能力第一部分:①②1. 掌握Ubuntu常用操作2. 掌握在ubuntu下开发单片机程序,跟STM32的开发有一个对比第二部分:③④⑤2.1 掌握u-boot的使用(无需了解代码,但是要会编译、烧写u-boot)2.2 掌握Linux内核的配置、编译、烧写2.3 掌握文件系统的结构,会烧写我们构建好的文件系统(不要求会自己编...原创 2020-04-15 20:29:55 · 178 阅读 · 0 评论 -
Part7:第一个LED驱动程序
1 实现原理2 代码实现2.1 搭建架构led驱动程序2.2 硬件操作原创 2020-04-14 22:47:39 · 170 阅读 · 0 评论 -
Part6: 构建根文件系统(在s3c2440开发板演示)
Part6: 构建根文件系统[在s3c2440开发板演示]0 最小根文件系统最基本组成1 构建最小根文件系统1.1 生成/dev/console和/dev/null1.2 编译busybox1.3 编写/etc/inittab配置文件1.4 复制glib动态库到/lib1.5 用yaffs制作根文件系统的映像文件1.6 烧写及结果2 完善:自动检测并挂载其它文件系统(proc/sysfs) + N...原创 2020-04-13 21:10:41 · 308 阅读 · 0 评论 -
Part5:u-boot和2.6.22.6内核源码的打补丁、配置与编译(Part4文章请先忽略)
0 学习路线请暂时忽略Part4文章,因为走偏了路线......(若是一节节讲解硬件(SPI/I2C等)编程,无疑枯燥且容易遗忘,因此,计划先从宏观角度俯瞰整个学习体系,看下面路线安排)学习路线安排:1)站在宏观角度理解整个体系(体验) 1)前面的Part1、part2、part3(入门嵌入式Linux必备干粮) 2)Part5:构建根文件系统 + LED、按键驱动编写 (备注:根文...原创 2020-04-13 14:53:16 · 195 阅读 · 0 评论 -
Part4:串口(UART)通信原理与硬件编程
0 写在前面以下内容针对“S3C2440”这款ARM9芯片,不同硬件的操作(寄存器)不同,但是UART原理是相通的。因此,把重点放在UART的原理及如何理清硬件操作操作流程!换句话说,重在硬件操作流程思维的培养,即演绎能力。即使后面讲到I2C、SPI等协议编程时,掌握这种演绎能力至关重要。1 UART的原理说起串口,大家比较耳熟能详。而UART:Universal Asynchrono...原创 2020-04-11 21:55:09 · 1368 阅读 · 0 评论 -
Part3:一个例子轻松入门并掌握基本Makefile编写【必读】
1111原创 2020-04-10 23:41:12 · 244 阅读 · 0 评论 -
Part2:S3C2440裸跑一个LED程序
0 写在前面目标:写一个跑在ARM9为核心的s3c2240开发板的LED程序三步走:1)读原理图,明确操作对象——即找到LED输出引脚 2) 明确操作,即如何控制LED 3)代码编写——重点!分别用汇编和C实现这里,我把1)2)步合成一部分讲解,重点讲解代码编写(涉及到ARM汇编指令、C函数调用栈机制)1 明确“操作对象”和“操作过程”操作对象——LE...原创 2020-04-09 16:11:29 · 319 阅读 · 0 评论 -
Part-1:Vi基本使用与Linux常用命令总结
0 写在前面本文参阅韦东山新1期视频的前5部分,重点讲解前3部分1)Linux入门命令2)Vi编辑器3)Linux进阶命令我把1)和 3)结合作为“常用命令”讲解1 Linux常用命令1.1 入门命令Linux命令格式:命令 [选项] [参数]入门命令:1) man --help info 2) ls pwd mv cp mkdir rmdir rm touch c...原创 2020-04-08 21:03:12 · 175 阅读 · 0 评论