
arm+linux开发
爱吃肉的大高个
执着于单片机应用、电子设计大赛、嵌入式开发的有理想的咸鱼
邮箱 gyyjx123024@gmail.com
展开
-
Linux嵌入式工程师养成手册-----目录
本篇博客是为了让大家更加便捷去查找某一篇博客的内容前言Linux嵌入式工程师养成手册-----前言基础C语言《C和指针》学习笔记(一)第一章~第六章《C和指针》学习笔记(二)第七~第十章《C和指针》学习笔记(三)第十一章~第十五章《C和指针》学习笔记(四)第十六章~第十七章如何理解C语言的声明c语言中关于const的使用C语言中memcpy和memset的使用详解为什么不能...原创 2020-02-12 22:34:27 · 2415 阅读 · 3 评论 -
Linux嵌入式工程师养成手册-----前言
为什么会有这些博客自己现在已经要进入大三下学期,很快就会面临秋招,自己从进入大学开始就从事嵌入式相关的开发,从arduino到STM32再到ARM+Linux开发,自己接触了不少的东西,写这些博客一个是为了对自己以往的知识进行一个总结,再一个也是希望可以给入门嵌入式的各位同学们提供一些帮助,都是从无到有,从看别人的到写自己的也是一个分享的过程。可能大家觉得总结并不是特别的重要,但是我想说把知识...原创 2020-02-12 21:51:33 · 4122 阅读 · 3 评论 -
Linux驱动开发(十九):SPI驱动
#简介Linux下的SPI驱动和I2C驱动类似,也是分为主机控制器驱动和设备驱动在LInux原创 2019-12-16 18:43:29 · 8541 阅读 · 1 评论 -
Linux驱动开发(十八):I2C驱动
简介I2C是我们在单片机开发时时常会用到的通讯接口,用来与一些字符型设备进行通信,比如:陀螺仪、温度传感器等等,同样的在Linux下I2C驱动也是十分重要的。有了操作系统的加持,我们不用像在32上那样去软件实现IIC协议,更多的是去学习Linux I2c的驱动框架,首先我们先来了解一下它的驱动框架,如下图Linux 的I2C体系结构主要分为3个部分I2C核心提供了I2C总线驱动和设备注...原创 2019-11-27 20:15:25 · 9160 阅读 · 0 评论 -
Linux驱动开发(十七):LCD驱动(Framebuffer子系统)
Framebuffer设备在裸机开发LCD的时候要初始化eLCDIF控制器,重点是LCD屏幕width、height、hspw、hbp、hfp、vspw、vbp、vfpLinux中的应用程序最终通过操作LCD的显存来实现在LCD上显示字符、图片等信息,因为虚拟内存的存在,驱动程序设置的显存和应用程序访问的显存要是同一片物理内存Framebuffer子系统,帧缓冲,简称fb,fb是一种机制,将...原创 2019-11-26 20:30:14 · 2133 阅读 · 2 评论 -
Linux驱动开发(十六):INPUT子系统
简介输入设备是典型的字符驱动,其工作原理一般是在按键、触摸等动作发生时在底层产生一个中断(或者驱动通过Timer定时查询),然后CPU通过SPI、I2C或外部存储器总线读取键值、坐标等数据,并将它们放到一个缓冲区,字符设备驱动管理该缓冲区,而驱动的read()接口让用户可以读取它们的键值、坐标等数据在这些工作中只有中断、读取键值(坐标值)是与设备相关的,而输入设备的缓冲区管理以及字符设备驱动的...原创 2019-11-24 22:12:50 · 765 阅读 · 0 评论 -
Linux驱动开发(十五):异步通知
简介前面使用阻塞和非阻塞的方式来读取驱动中的按键值都是应用程序主动读取的,对于非阻塞的方式还需要应用程序通过poll函数不断的轮询Linux内核提供了异步通知这个机制来实现驱动程序主动向应用程序发出通知,报告自己可以访问,然后应用程序再从驱动程序中读取或写入数据,软件中断的方式”信号“类似于硬件上的中断,是软件层面上对中断的模拟,设备可以被读写时发出信号阻塞、非阻塞、异步通知是针对不同的场...原创 2019-11-19 19:18:13 · 1987 阅读 · 0 评论 -
Linux驱动开发(十四):阻塞与非阻塞IO——轮询操作
非阻塞IO非阻塞式IO则会轮询等待知道设备资源可以使用或者直接放弃如果用户以非阻塞方式访问设备提供轮询的处理方式可以通过select、epoll、poll函数来查询设备是否可以操作到应用程序调用以上三个函数 驱动中的poll函数就会执行,我们在驱动中需要编写poll函数三种IO多路复用的机制比较select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,...原创 2019-11-19 15:33:16 · 959 阅读 · 0 评论 -
Linux驱动开发(十三):阻塞与非阻塞IO——等待队列
阻塞与非阻塞IO阻塞式IO在请求资源时如果不能获取到设备资源,会将应用程序挂起,知道资源可以被获取非阻塞式IO则会轮询等待知道设备资源可以使用或者直接放弃使用非阻塞访问从设备读取数据,当设备不可用或数据位准备好时会立即返回错误码,表示数据读取失败,应用程序会再次读取数据,一直往复循环,直到数据读取成功调用read函数的时候加上O_NONBLOCK就是非阻塞方式打开这篇博客先记录阻塞式...原创 2019-11-19 14:24:49 · 636 阅读 · 1 评论 -
Linux驱动开发(十二):MISC杂项设备驱动
简介杂项设备驱动,就是最简单的字符设备驱动,通常嵌套在platform总线驱动中实现复杂的驱动主设备号都为10,不同的设备使用不同的从设备号MISC设备驱动用于解决字符设备驱动不断增加设备号紧张的问题MISC设备会自动创建cdev,不需要以前那样手动创建采用MISC设备驱动可以简化字符设备驱动的编写驱动框架我们需要向Linux内核注册一个miscdevice设备,miscdevice...原创 2019-11-17 17:00:43 · 750 阅读 · 0 评论 -
Linux驱动开发(十一):pinctrl子系统和GPIO子系统
pinctrl子系统和GPIO子系统简介简介配置寄存器来控制IO的方式太过于原始,Linux内核提供了pinctrl子系统和gpio子系统用于GPIO驱动,当然pinctrl子系统负责的就不仅仅是GPIO的驱动了而是所有pin脚的配置。pinctrl子系统是随着设备树的加入而加入的,依赖于设备树。GPIO子系统在之前的内核中也是存在的,但是pinctrl子系统的加入GPIO子系统也是有很大的...原创 2019-11-14 20:25:32 · 2257 阅读 · 0 评论 -
Linux驱动开发(十):设备树下的platform平台设备驱动
这里写自定义目录标题简介关于platform驱动框架bus、driver、device驱动的分层platform驱动模型platform总线platform驱动platform设备引入设备树后的变化实验代码与分析实验代码代码分析总结简介在今年五月份我在4412上学习了platform总线设备的驱动编写,了解了引入platform总线的目的以及带来的方便之处,初步了解了Linux内核总线、设备、...原创 2019-11-14 17:20:43 · 4017 阅读 · 0 评论 -
Linux设备树相关操作
Linux设备树相关操作以及驱动开发流程简介相关文件组成和介绍dts和bingings设备树文件之间的关系官方文档设备树dts的基本构造节点和根节点简介最近在学习设备树以及设备基于设备树的驱动开发,其实我是一直在纠结要不要写这篇博客的,因为自己了解的仅仅是设备树的一些定义,一些操作,还没有去看源码,这样写出来的博客并不是太有深度的,但是还是想记录一下自己的学习历程,对自己这一周多的学习大概做一...原创 2019-11-01 14:52:05 · 1136 阅读 · 0 评论 -
4412开发板学习之Linux驱动开发(九):中断控制及按键中断实现
中断控制及按键中断实现基本概念相关函数与结构体中断注册函数中断释放函数相关结构体硬件软件准备工作代码与分析驱动代码驱动代码分析实验安装模块查看中断总结一下基本概念在这里就不讲解什么是中断了,在单片机中我们对中断都已经相当了解了中断的处理流程是:按下(产生中断)-》跳转到异常向量入口,执行中断函数中断函数要:保护现场、执行中断处理函数、恢复现场我们需要做什么:学会使用中断注册函数,了解注册...原创 2019-05-07 01:02:17 · 1741 阅读 · 1 评论 -
4412开发板学习之Linux驱动开发(八):GPIO读操作与按键轮询实现
GPIO读操作与轮询按键GPIO读操作硬件查找对应IO口寄存器配置软件需要的函数注册设备代码及分析实验效果轮询按键原理分析硬件软件用到的函数先前准备工作代码及分析实验效果总结GPIO读操作前面我们使用GPIO来控制IO口,点亮了LED灯,当然,IO口是可以有多种配置的,输入输出是最基本的两种,今天我们就来尝试一下GPIO的输入操作,我们使用4412开发板上的3、4号拨码开关来实现硬件查找对...原创 2019-05-07 00:45:37 · 2304 阅读 · 0 评论 -
4412开发板学习之Linux驱动开发(五):4412MMU及GPIO操作(点灯)
4412MMU及GPIO操作(点灯)物理地址与虚拟地址与传统MCU的对比4412中的物理地址MMU内存管理单元存储器分类4412中的存储器映射物理地址和虚拟地址其他的地址概念GPIO操作GPIO初始化EXYNOS4_GPL2(0)的分析GPIO的数量S5P_VA_GPIO2虚拟地址与物理地址的映射GPIO初始化流程LED驱动程序用到的头文件管脚调用、赋值以及配置点灯实验硬件连接生成设备节点的代码生...原创 2019-05-01 01:29:15 · 2585 阅读 · 0 评论 -
4412开发板学习之Linux驱动开发(四):生成设备节点以及编写简单应用调用驱动
生成设备节点以及编写简单应用调用驱动生成设备节点关于杂项设备杂项设备内核文件结构体如何生成设备节点代码代码分析结果演示编写简单应用调用驱动基本原理写代码前应知道的需要的头文件调用的函数编译代码实验代码代码分析结果演示对设备节点与设备注册、驱动注册的区分代码演示测试重点区分生成设备节点Linux到2.6版本时改动巨大,针对以前版本的资料直接跳过学习要“以始为终”工作用不到的就不去浪费时间关于...原创 2019-04-30 00:28:24 · 1416 阅读 · 0 评论 -
在Ubuntu下使用QEMU搭建arm开发环境(一)搭建基本开发环境
马上就要开学了,开学后就会开始arm+Linux的学习,因为马上就要去学校了,就没有买板子,打算去了学校再买,但是想学习的心是迫切的(O(∩_∩)O哈哈~),在网上浏览的时候发现了QEMU这个"神器",它是一个开源的可执行硬件虚拟化的托管虚拟机,可以虚拟出甚至cortex A的开发板,提供必备的外设:LCD、串口等等,几乎可以实现在线学习arm开发,简直是神器有木有,所以我就果断开始了学习...原创 2019-02-18 22:27:26 · 10345 阅读 · 4 评论 -
在Ubuntu下使用QEMU搭建arm开发环境(二)编译Linux内核、制作根文件系统
一、编译Linux内核下载Linux内核 推荐使用国内的镜像网站下载 下载完成后解压修改Makefile 搜索CROSS_COMPILE交叉编译ARCH ?= armCROSS_COMPILE ?= arm-linux-gnueabi- 进入/arch/arm/查看官方支持的开发板 ...原创 2019-02-18 23:08:06 · 5675 阅读 · 4 评论 -
在Ubuntu下使用QEMU搭建arm开发环境(三)使用u-boot加载Linux内核
嵌入式启动概述 嵌入式boot loader 功能类似于PC的BIOS、硬件检测是否正常 加载操作系统镜像到RAM 设置不同的启动方式 常见的启动方式 NOR/NAND flash启动 从SD卡启动 BootLoader从网络加载Linux内核启动U-boot编译 ...原创 2019-02-19 22:11:04 · 4751 阅读 · 6 评论 -
在Ubuntu下使用QEMU搭建arm开发环境(四)挂载NFS根文件系统
在前面的实验中我们将根文件系统制作到了SD卡上,每次启动系统时从SD卡启动,这样带来的问题是当我们主机要往开发板发送一些文件的时候必须将SD卡挂载然后将文件拷贝进去,然后在umount,这样的过程实在是太麻烦了,当然是有解决办法的,BootLoader可以从网络加载Linux内核并启动,我们可以使用NFS来搭建一个通过网络共享的文件夹,Linux主机可以随时向文件夹写入数据,开发板也可以随...原创 2019-02-19 22:42:36 · 4076 阅读 · 1 评论 -
在Ubuntu下使用QEMU搭建arm开发环境(五)在开发板上运行应用和内核驱动程序
在前面的四篇博客中我们完成了在QEMU上开发环境的搭建,现在我们可以在开发板上运行应用以及内核驱动程序,运行一些简单的例子来尝尝鲜。运行应用程序 在Linux主机端交叉编译生成arm端的可执行文件arm-linux-gnueabi-gcc -o hello_arm hello.c 拷贝到NFS共享文件夹cp hello_...原创 2019-02-20 09:51:18 · 2705 阅读 · 0 评论 -
4412开发板学习之入门体验:前言及编译烧写安卓4.0.3
前言 在赶开学的时候买了迅为家的iTop4412开发板,4412是三星的SOC,2012年的产品,曾用在自家旗舰机S3上,魅族等品牌也推出过搭载该SOC的机型,可以说是经历了重重考验,六七年来也有许多的厂商开发了开发板及学习板,资料丰富,同时四核A9,1.4GHZ的主频,可以说是32位ARM的巅峰之作了,再往后的就是64位的ARM芯片了,同时支持双通道DDR3内存、支持电源管理、Mali...原创 2019-03-03 21:56:11 · 1682 阅读 · 0 评论 -
4412开发板学习之Linux系统编程(一):最小Linux系统的搭建、tftp服务器搭建与测试、搭建NFS文件系统
前言 Linux系统编程是嵌入式从业人员至关重要的技能,无论是应用工程师还是驱动工程师都应该熟练的掌握Linux编程,我也会话更多的时间再它的学习上,通过阅读讯为的《Linux系统编程》以及《Unix环境高级编程》(APUE)来进一步的学习。 今天搭建了最小Linux系统;搭建并测试了tftp服务器,便于虚拟机与开发板的文件传输;搭建了NFS根文件系统,更加方便了学习与调试的过...原创 2019-03-03 22:19:11 · 1991 阅读 · 0 评论 -
4412开发板学习之Linux系统编程(二):文件IO及字符设备控制
前言 Linux的核心就是一切皆文件,所以Linux下的文件编程至关重要文件IO 普通的IO操作一般会被内核缓存,这种IO被称作缓存IO Linux提供了一种文件访问机制:不经过操作系统内核的缓存,数据直接在磁盘和应用程序地址空间进行传输,该文件访问的机制称作为直接IO,直接IO是一种非常高效的手段 Linux中IO的概念介绍 所有的IO...原创 2019-03-04 20:48:09 · 1794 阅读 · 0 评论 -
4412开发板学习之Linux系统编程(三):串口编程实战
前言 串口是我们特别常用的一个通讯接口,在Linux下的串口编程使用的就是文件IO的操作,所以说这次来进行串口的应用编程,实现发送接收功能实战Linux串口编程 在单片机串口编程中,需要用户直接对寄存器以及中断进行控制 而在Linux串口编程中,无论是官方直接下载的原生内核还是厂家提供的Linux内核都会将串口驱动写好,所以不需要自己写串口驱动 Linu...原创 2019-03-04 21:01:08 · 3588 阅读 · 0 评论 -
4412开发板学习之Linux驱动开发(二):总线、设备、驱动注册流程
设备驱动注册到源码总线、设备、驱动注册流程图说明首先关于平台platform总线关于设备关于驱动注册设备注册设备的流程查看设备是否注册成功注册驱动(很重要)一些说明编写驱动程序代码分析实验测试安装驱动查看驱动卸载驱动几句总结总线、设备、驱动注册流程图说明以上这个图片是相当重要的一个图片吗,它完整诠释了设备和驱动的注册流程。首先关于平台platform总线总线是Linux中很重要的一个概...原创 2019-04-28 17:30:06 · 1359 阅读 · 0 评论 -
4412开发板学习之Linux驱动开发(三):以module的方式注册设备
以module的方式注册设备为什么么要以module的方式注册设备注册设备分析代码实现在驱动代码中获取设备注册的信息代码实现分析代码测试不注册设备安装驱动注册设备首先注册设备查看设备注册驱动卸载驱动并释放设备总结为什么么要以module的方式注册设备在前面的博客我记录了如何注册设备和如何注册驱动,我们可以明显的看出设备的注册是很麻烦的,需要修改平台文件,需要配置menuconfig,需要重新编...原创 2019-04-28 21:22:37 · 1138 阅读 · 0 评论 -
4412开发板学习之Linux驱动开发(一):HELLO WORLD
驱动开发HELLO WORLD前言最小驱动模块示意图Hello World源码及分析使用Makefile进行编译Makefile源码及分析编译流程分析编译在开发板进行模块的操作将.ko文件复制到开发板安装模块查看模块卸载模块前言开始学习Linux驱动开发了,对于所有的程序员来说,任何语言,任何工具,第一个程序当然是Hello World了最小驱动模块示意图Hello World源码及分析...原创 2019-04-24 19:30:29 · 2178 阅读 · 2 评论 -
4412开发板学习之Linux驱动开发(六):字符设备驱动的基本操作(申请设备号、注册设备)
这里写自定义目录标题前言给模块传递参数传递单个参数传递多个参数实验代码代码分析效果申请字符类设备号静态申请字符类设备号重要的头文件函数功能实验代码代码分析效果动态申请字符类设备号函数功能实验代码代码分析演示注册字符类设备函数及头文件介绍实验代码代码分析效果前言一开始纠结了半天这篇博客应该叫什么,本来想叫字符设备驱动开发流程,但是转念一想现在仅仅是学了一些皮毛,也仅仅是字符设备驱动的一些最基本的...原创 2019-05-04 23:12:48 · 1049 阅读 · 1 评论 -
4412开发板学习之Linux驱动开发(七):字符设备驱动的基本操作(生成设备节点、编写设备驱动)
字符设备驱动的基本操作(生成设备节点、编写设备驱动)生成字符类设备节点设备类的概念生成字符类设备节点相关函数、结构体及头文件实验代码代码分析实验效果编写字符驱动说明实验代码代码分析实验效果生成字符类设备节点设备类的概念前面介绍的设备中的模型:bus,device,driver都是有比较明确的定义,bus代表总线,device代表实际的设备和接口,driver代表驱动class是设备类,它是...原创 2019-05-04 23:59:52 · 900 阅读 · 0 评论 -
荔枝派nano上手笔记(一)移植Uboot
在放假前就买了荔枝派nano和zero这俩块小板子,打算寒假上手玩一下,但是赶放假看了看官方的文档发现那时的水平还不太能玩的动,那时对Linux基本不太熟悉,只会一些简单的操作,经过了快一个月的学习,现在感觉自己已经可以来试着玩玩了,同时也是为开学上手驱动开发打些基础,今天玩了玩nano这块板子,在板子上移植了Uboot。一、硬件参数 CPU: 全志 F1C100s, ARM...原创 2019-02-11 23:11:38 · 13085 阅读 · 2 评论