
Linux驱动
文章平均质量分 73
Linux驱动
L7256
这个作者很懒,什么都没留下…
展开
-
printf是如何打印到终端
打开了控制台的设备: /dev/consloe,并通过int fd = open ("/dev/consloe")往这个设备写数据,通过内核的调用栈:ttycore层--->ldisc层--->和设备匹配上的驱动的write方法。原创 2022-10-16 18:46:29 · 959 阅读 · 0 评论 -
系统调用的实现
参考连接 https://blog.youkuaiyun.com/weixin_42992444/article/details/108571515 1.如何查看系统调用 系统调用的搜索方法系统调用xxx都是从sys_xxx作为函数入口的但是系统中是无法搜到sys_xxx函数的,因为是通过宏定义生成的sys_xxx{ 那想要查看实现:(1)搜SYSCALL_DEFINE (2)搜对应的参数 比如--int socket (int __domain, int __type, i......原创 2022-05-22 16:01:28 · 207 阅读 · 0 评论 -
IIC驱动---应用程序开发(3)
APP层: 参考文档:Documentation/i2c/dev-interface#include <linux/i2c-dev.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <stdio.h>#include <errno.h>#include <stdlib.h>#include <sys/io原创 2021-12-12 20:47:11 · 448 阅读 · 0 评论 -
IIC驱动---平台设备驱动层分析(5)
基于平台设备驱动架构分析。以arch/arm/plat-samsung/dev-i2c0.c为参考例子原创 2021-12-12 20:46:21 · 283 阅读 · 0 评论 -
IIC驱动---系统流程分析(4)
从APP层----设备驱动层----核心层------APP:fd = open("/dev/i2c-1", O_RDWR);VFS: sys_openi2c-dev.c: i2c_dev_init() 执行i2cdev_fops的open操作即:i2cdev_open();static int i2cdev_open(struct inode *inode, struct file *file){ // 获取次设备...原创 2021-12-12 00:08:08 · 566 阅读 · 0 评论 -
IIC驱动---系统框架(2)
IIC总线架构分析:linux的driver/i2c目录下。参考busses目录下用到的文件。 APP层==========================================i2c设备驱动层组件(i2c-dev.c)==i2c核心层组件 (i2c-core.c)==i2c总线驱动层组件(i2c-s3c2410.c)=======================================硬件操作...原创 2021-12-09 17:56:25 · 171 阅读 · 0 评论 -
IIC驱动---硬件知识(1)
0. 基础了解SDA(serial dat address)SCL(Serial Clock Line)-IIC是一主多从的连接方式。半双工,一个时间点只能读或者写。主机通过每个从机的设备地址去区分每个设备。而每一个IIC从设备的设备地址可以在IIC设备的数据手册去看到。比如AT24C08,通过外围硬件电路,可以把从设备的设备地址固定。1.主从之间的设备地址的交互:主机---》写到从设备。从设备--》写到主机。2.传输速度:低速100 kps. 快速 400 kps. 高速.原创 2021-12-07 20:55:51 · 431 阅读 · 0 评论 -
jz2440:platform设备驱动LED实验(13)
1.驱动:driver.c#include <linux/module.h>#include <linux/module.h>#include <linux/kernel.h>#include <linux/of.h>#include <linux/of_device.h>#include <linux/platform_device.h>#include <linux/fs.h>#include...原创 2021-09-01 01:59:40 · 443 阅读 · 0 评论 -
jz2440:platform设备驱动(12)
参考:正点原子。设备驱动模型可以让设备驱动同时支持多个主机,并且只用一份驱动,有点用数组管理每个设备的感觉。。但是实际当中设备驱动可能不止一个,于是产生了下面这种模型,总线充当中间人,给两边配对。但是在 SOC 中有些外设是没有总线这个概念的,但是又要使用总线、驱动和设备模型该怎么办呢?为了解决此问题,Linux 提出了 platform 这个虚拟总线,相应的就有 platform_driver 和 platform_device。...原创 2021-08-30 11:40:33 · 173 阅读 · 0 评论 -
jz2440:QT控制LED灯点亮熄灭(11)
1.LED灯的驱动:首先要准备好在驱动文件,通过insmod led.ko来加载模块,然后在QT的代码里面配合调用open,write,read函数来点亮,关闭LED灯。这一步,做完,应该可以通过测试程序点亮关闭LED。具体内容可参照:jz2440点亮LED2.QT代码:实现的功能:LED按键进入右图,Back键进入LED按键界面。 LEDx open 与 LEDx close可以打开关闭3个LED灯。代码在这个位置:https://github.com/zion6135/QT.原创 2021-08-27 20:04:06 · 3581 阅读 · 0 评论 -
jz2440:运行第一个QT程序(10)
参考文档:链接:密码:ez69 正点原子1.在Ubuntu安装QTCreator(参考正点原子)wget http://download.qt.io/archive/qt/5.12/5.12.9/qt-opensource-linux-x64-5.12.9.runchmod +x qt-opensource-linux-x64-5.12.9.run sudo ./qt-opensource-linux-x64-5.12.9.run安装好了QT,但点了QTCreator没有..原创 2021-08-11 22:35:32 · 509 阅读 · 0 评论 -
jz2440:搭建虚拟机与开发板的TFTP文件互传(9)
其中,server_args设置的/var/tftpboot目录是tftp服务器的目录,TFTP客户端就是从这个目录里获取文件的。"建立TFTP服务器的目录。然后设置/var/tftpboot的访问权限为777."建立文件,向文件中写入如下代码(必须按照格式严格对齐):为方便,贴过来。然后设置/var/tftpboot的访问权限为777.主机连路由器的WIFI,开发板网线连路由器。jz2440 //ubuntu的目标文件。安装tftp和tftpd,输入命令:“然后建立TFTP配置文件,使用命令:"...原创 2021-08-11 21:42:42 · 419 阅读 · 0 评论 -
jz2440:在开发板移植QT5.6(8)
1.编译u-bootcd u-boot-2012.04.01/patch -p1 <../u-boot-2012.04.01_100ask.patch 修改了内核分区大小,将默认的2m改为了4m(打完补丁在进行以以下操作)vim include/configs/smdk2440.h 这是我改后的文件保存退出后执行以下命令编译u-bootmake CROSS_COMPILE=/usr/local/arm/gcc-4.4.3/bin/arm-linux- sm.原创 2021-08-08 02:00:28 · 677 阅读 · 0 评论 -
jz2440:windows与开发板通过网线互传文件(7)
(1)配置开发板ip,和PC端保持一致,只要两边可以互相PING通就OK(2)在官网http://tftpd32.jounin.net/tftpd32_download.html下载tftp软件并安装,安装后界面如下(3)把所需要上传的文件放到C:\Program Files\Tftpd64 目录下(以xxx.txt为例),利用secureRCT客户端,在命令窗口执行:(也就是开发板的终端)tftp -g -r xxx.txt 192.168.87.15即可完成传输。如下图...原创 2021-07-30 03:05:42 · 600 阅读 · 0 评论 -
jz2440:第三个驱动程序,按键中断(6)
按键中断:中断源------调用处理函数-------清除中断标志位Linux : asm_do_IRQ()函数实现----传入中断号(中断源)handle_edge_irq-------desc->chip->ack(irq)清中断----------handle_IRQ_event按下按键---CPU进入异常模式---跳转到 b vector_irq + ........----调用到__irq_usr----调用irq_handler__irq_svc: ...原创 2021-05-20 00:03:13 · 254 阅读 · 1 评论 -
jz2440:第二个驱动程序,按键驱动(5)
mount -t nfs -o intr,nolock,rsize=1024,wsize=1024 192.168.0.109:/home/zion/gcc_jz2440/nfs_root /nfs_root原创 2021-05-11 16:01:24 · 194 阅读 · 0 评论 -
jz2440:第一个驱动程序,点亮LED灯(4)
需要先在开发板上搭建好u-boot +Linux + 根文件系统的环境(参考环境搭建) 1.首先可看https://blog.youkuaiyun.com/m0_37844072/article/details/113756569大概理解:要完成一个驱动,需要将灯的驱动的模块加载到运行的系统中。。所以我们的驱动程序需要完成对字符设备的open()与write()......也就是点亮与熄灭,以及应用程序去测试。 2.根据原理图和手册可知,LED的三个灯连在GPF4,5,6引脚上 ,学过单片机的都很好理解,可通过配置原创 2021-02-25 22:33:39 · 1081 阅读 · 0 评论 -
jz2440:Ubuntu与开发板之间互传文件(3)
1.首先保证开发板和主机(Ubuntu)处于统一网段。。。并且可以互相ping通,,,在开发板的终端输入ifconfig,可看到ip地址和子网掩码。。手动配置Ubuntu的IP地址和子网掩码。。然后在开发板输入ping 192.168.0.72(主机) //如果ping通代表通路ok.......然后在Ubuntu输入ping 192.168.0.26(开发板) //如果ping通代表通路ok2.在Ubuntu配置挂载的服务器环境sudo apt-get install nfs..原创 2021-02-25 02:49:59 · 655 阅读 · 0 评论 -
jz2440:开发板的u-boot + 内核 + 根文件系统搭建(2)
首先要在开发板上搭建一个Linux系统,需要完成以下几个步骤1.BootLoader-----打补丁、编译 u-boot---执行以下步骤----最终目的:启动内核$ tar xjf u-boot-1.1.6.tar.bz2 //解压 u-boot-1.1.6.tar.bz2 压缩包$ cd u-boot-1.1.6 //进入 u-boot-1.1.6 目录$ patch -p1 < ../u-boot-1.1.6_jz2440.patch //对 u-boot-1.1.6 打 patc原创 2021-02-24 22:55:56 · 1238 阅读 · 1 评论 -
jz2440:在ubuntu环境下烧录,编译文件(1)
1. 使用oflash烧录裸机程序到NANDFLASH--注意板子的开关需要拨到NANDFLASH将oflash拷贝到/usr/local/bin目录,在terminal输入of,然后Tab则会自动弹出oflash,即可使用该命令!!! /usr/bin下面的都是系统预装的可执行程序,会随着系统升级而改变。/usr/local/bin目录是给用户放置自己的可执行程序的地方,推荐放在这里,不会被系统升级而覆盖同名文件。然后执行以下步骤即可烧录示例文件leds.bin到NAND FLASH。然后拔掉原创 2021-02-07 00:46:24 · 700 阅读 · 0 评论 -
(2)字符设备驱动基本框架
参考正点原子视频,做记录以及简单使用。首先创建如下所示文件夹及文件,文件的内容如下三个所示。。。/************************chrdevbase.c*****************/#include <linux/module.h>#include <linux/kernel.h>#include <linux/delay.h>#include <linux/ide.h>#include <linux/in.原创 2021-02-09 00:44:17 · 214 阅读 · 0 评论 -
(1)字符设备的注册与注销
字符设备是 Linux 驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节流进行读写操作的设备,读写数据是分先后顺序的。比如我们最常见的点灯、按键、IIC、SPI,LCD 等等都是字符设备,这些设备的驱动就叫做字符设备驱动。/************字符设备注册*******/static inline int register_chrdev(unsigned int major, const char *name,const struct file_operations *fops)原创 2021-02-08 17:15:37 · 449 阅读 · 0 评论 -
注册回调函数的基本实现
1.简单的定义及基本实现所谓函数指针,首先是一个指针,不过它是指向存储函数入口地址的指针,这类似于一个数组char aa[5]; aa是指向数组的首地址(也可理解为数组的入口地址)。而这个指针是指向函数存储的内存。 示例代码---两种基本使用方法#include "stdio.h"#include "stdlib.h"//注释部分为第二种写法void (*ptrfun)(int data); //声明一个这样的函数指针 == 定义+初始化//typedef void (*ptrf.原创 2021-01-22 14:52:51 · 967 阅读 · 0 评论 -
Bootloader的简单理解
系统上电之后,需要一段代码来初始化,为所有的代码运行搭建环境,可以将操作系统内核复制到内存中运行,我们称这段代码为Bootloader.Bootloader的启动方式1.启动加载模式:上电后,Bootloader从板子上某块存储设备上将操作系统加载到RAM运行。比如我们拿到一台装好了操作系统的电脑。系统启动先从C盘将操作系统加载出来到RAM运行。完成这个功能的代码就叫Bootloader。又比如单片机:我们下载程序到板子上,1.上电烧录:当单片机的烧录口检测到启动信号(电脑点了下载),于是进入程原创 2021-02-07 11:03:37 · 1131 阅读 · 0 评论 -
模块加载卸载
应用程序。库,内核,驱动程序关系 简单的理解就是平时我们在操作系统(内核)上写的代码叫做应用程序,我们会调用一些库函数/编译生成的链接文件(如xxx.so),这些统称为库。而它们运行在“用户空间”,区分出用户空间是为了操作系统的正常运行,防止写的程序对内存的操作导致系统崩溃,可能你的系统再也跑步起来了,只能重装。而驱动程序往往会加载进内核,告诉内核我会干什么事,...原创 2021-01-28 19:36:55 · 1080 阅读 · 0 评论