![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
嵌入式
文章平均质量分 85
茫茫大士
热爱编程
展开
-
高通源码下载
A:因为formatter这个模块已经在3.10上删除了,所以出现错误,解决办法,将附件formatter.py放到python3.10的lib目录(默认 /usr/lib/python3.10/)即可。或者从wget https://www.python.org/ftp/python/3.8.0/Python-3.8.0a4.tar.xz下载解压得到formatter.py,然后放置到python3.10的lib目录。参考Android源码下载的环境搭建。更新最新 help.py 代码。转载 2024-05-16 17:37:52 · 123 阅读 · 0 评论 -
wifi详解(五)
最近一段时间里对wifi模块的学习,让我对wifi有了更多的了解,但这些也是不够的。对于wifi模块,需要了解的东西很多,这里只对其工作原理和工作流程以及移植过程进行了简单的阐述,还有很多方面没有概括到,如:协议层的实现方式和过程,以及数据传输中的细节和SDIO相关内容等等,这些在实际的wifi模块工作时可能都需要我们去进一步的分析和把握,虽然对wifi的理解可能不到位,但对这段时间学习做一次总结,也是大有裨益的,希望有机会可以更深入的学习wifi模块。转载 2023-06-05 18:15:32 · 428 阅读 · 0 评论 -
wifi详解(四)
return ret;实际上传递的就是ioctl_standard_call和ioctl_private_call两个函数,在看看wireless_process_ioctl函数,这个函数很重要,下面做重点分析:转载 2023-06-05 18:13:08 · 529 阅读 · 0 评论 -
wifi详解(三)
在drivers/mmc下面是mmc卡,SD卡和SDIO卡驱动部分,其中包括host驱动,card驱动和core部分,由于网络接口卡挂接在SDIO总线上,所以在此之前我们先看一下SDIO的驱动结构。其驱动在drivers/mmc目录下的结构为:|-- mmc主要关注的目录是core目录,这个目录是真个驱动的核心目录,是媒体卡的通用代码部分,包括core.c,host.c和sdio.c等。转载 2023-06-05 17:56:00 · 1387 阅读 · 0 评论 -
wifi详解(二)
我们都知道Wifimanager只是个服务代理,所以它会调用WifiService的setWifiEnabled()函数,而这个函数会调用 sendEnableMessage()函数,了解android消息处理机制的都知道,这个函数最终会给自己发送一个 MESSAGE_ENABLE_WIFI的消息,被WifiService里面定义的handlermessage()函数处理,会调用 setWifiEnabledBlocking()函数。然后下面的流程同上面的自动扫描,我们来分析一下手动扫描从哪里开始的。转载 2023-06-05 17:35:40 · 716 阅读 · 0 评论 -
【转载】wifi详解(一)
作为全球公认的局域网权威,IEEE802工作组建立的标准在过去二十年内在局域网领域独领风骚。这些协议包括了802.3Ethernet协议、802.5TokenRing协议、802.3z100BASE-T快速以太网协议。在1997年,经过了7年的工作以后,IEEE发布了802.11协议,这也是在无线局域网领域内的第一个国际上被认可的协议。转载 2023-06-05 17:26:24 · 354 阅读 · 0 评论 -
memtester4.3.0
为一究memtester原理,现对其每个函数均按照如下格式进行描述:以下是对每个测试项的简要描述:方法test_stuck_address函数名:基本pattern按照下图所示,j=0时,先把P1的地址值写入对应的内存位置处,然后P2取反放入对应位置处,如此反复;然后下一轮开始,即j=1,把上述步骤反过来再进行一遍即可;正在上传…重新上传取消直到16轮结束,假若发生异常就把异常的地址直接返回即可!目的(原理)为了验证是否有地址无法访问,验证的是地址线。时间花销条件:全空间1G Byte ,DDR带宽16转载 2022-12-05 16:07:38 · 1015 阅读 · 0 评论 -
mtd-utils 工具的使用
也可以使用diff命令来比较。#./mtd_debug erase /dev/mtd0 0x0 0x40000 // 擦出/dev/mtd0 分区上 从0x0开始的 , 128K*2 大小的数据。#./mtd_debug erase /dev/mtd0 0x0 0x40000 // 擦出/dev/mtd0 分区上 从0x0开始的 , 128K*2 大小的数据。#./nanddump -p /dev/mtd1 //dump出nand flash /dev/mtd1数据,可以看到现在的数据不再是全ff。转载 2022-09-30 19:39:00 · 2406 阅读 · 0 评论 -
kernel里__printf(a, b)说明
FROM:__attribute__ ((format (printf, 2, 3)));_陈嘉怡的专栏-CSDN博客这句主要作用是提示编译器,对这个函数的调用需要像printf一样,用对应的format字符串来check可变参数的数据类型。例如:extern int myprintf (void *other, const char *fmt, ...)__attribute__ ((format (printf, 2, 3)));format (printf, 2, 3)告诉编译器,fm转载 2021-12-22 17:59:37 · 1589 阅读 · 0 评论 -
initramfs实作
FROM:https://www.cnblogs.com/pied/archive/2013/01/29/2880718.html这个是翻译来的,原文地址:http://www.landley.net/writing/rootfs-howto.html怎样使用initramfs工作过程简述在2.6kernel启动时,它把rootfs作为它的第一个文件系统挂载(注意:这里的rootfs是真名!!!不是root filesystem的缩写)。rootfs是一个特殊的tmpfs,这个不能.转载 2021-06-04 19:35:09 · 666 阅读 · 0 评论 -
华为软件编程规范和范例
FROM:http://blog.csdn.net/jwbecalm/archive/2005/12/14/552403.aspx目录 1排版 6 2注释 11 3标识符命名 18 4可读性 20 5变量、结构 22 6函数、过程 28 ...转载 2021-04-08 17:30:11 · 310 阅读 · 0 评论 -
Open-Drain&Push-Pull
FROM:https://blog.csdn.net/qq_39560607/article/details/81714120在配置GPIO(General Purpose Input Output)管脚的时候,常会见到两种模式:开漏(open-drain,漏极开路)和推挽(push-pull)。对此两种模式,有何区别和联系,下面整理了一些资料,来详细解释一下:一、Push-Pull推挽输出1、原理输出的器件是指输出脚内部集成有一对互补的MOSFET: 当Q1导通、Q2截止时输出高电平转载 2020-11-12 10:59:28 · 5953 阅读 · 1 评论 -
C 终端输出颜色
FROM:https://blog.csdn.net/aggresss/article/details/88116234?utm_medium=distribute.pc_relevant_download.none-task-blog-baidujs-1.nonecase&depth_1-utm_source=distribute.pc_relevant_download.none-task-blog-baidujs-1.nonecase从一个实例开始在终端打印绿色的 “Hello, Wo转载 2020-10-16 20:38:38 · 393 阅读 · 0 评论 -
PC机并口和并口打印机
FORM:https://blog.csdn.net/broadview2006/article/details/3975094C并口的寄存器本文摘自王洪辉老师的《嵌入式系统Linux内核开发实战指南(ARM平台)》一书PC上的程序通过访问并口的I/O端口寄存器来访问、控制并口的管脚信号,这些端口包括数据端口、状态端口和控制端口,其中每个端口都有自己的端口号,相当于它们的地址。程序通过端口号来访问端口寄存器。PC并口1的数据端口号为3BCH,状态端口号为3BDH,控制端口号为3BEH;PC并转载 2020-10-12 19:48:32 · 1612 阅读 · 0 评论 -
[转载]kbuild-DEFINE(sym, val)
FROM:https://blog.csdn.net/linglongqiongge/article/details/50008301#define DEFINE(sym, val) \ asm volatile("\n->" #sym " %0 " #val : : "i" (val))这是一个内联汇编宏,不过实际上它不会生成合法的内联汇编代码,它只是利用了内联汇编中嵌入立即数的功能。2.arch/x86/include/asm/unistd.h这个文件使用了宏控制..转载 2020-08-11 15:10:36 · 365 阅读 · 0 评论 -
探索Linux内核:Kconfig/kbuild的秘密-Exploring the Linux kernel: The secrets of Kconfig/kbuild
FORM:https://www.sohu.com/a/272455844_610730英文原版FROM:深入了解Linux配置/构建系统的工作原理。自从Linux内核代码迁移到Git以来,Linux内核配置/构建系统(也称为Kconfig /kbuild)已经存在了很长时间。然而,作为支撑基础设施,它很少成为人们关注的焦点;甚至在日常工作中使用它的内核开发人员也从未真正过它。为了探索如何编译Linux内核,本文将深入研究Kconfig/kbuild内部过程,解释如何生成.config文件和转载 2020-07-03 20:25:35 · 827 阅读 · 0 评论 -
Linux 初始 RAM 磁盘(initrd)概述
FROM:https://www.ibm.com/developerworks/cn/linux/l-initrd.html什么是初始 RAM 磁盘?初始 RAM 磁盘(initrd)是在实际根文件系统可用之前挂载到系统中的一个初始根文件系统。initrd 与内核绑定在一起,并作为内核引导过程的一部分进行加载。内核然后会将这个 initrd 文件作为其两阶段引导过程的一部分来加载模块,这样才能稍后使用真正的文件系统,并挂载实际的根文件系统。initrd 中包含了实现这个目标所需要的目录和可执行程转载 2020-06-23 19:54:22 · 546 阅读 · 0 评论 -
制作initramfs/initrd镜像
Linux kernel在自身初始化完成之后,需要能够找到并运行第一个用户程序(这个程序通常叫做“init”程序)。用户程序存在于文件系统之中,因此,内核必须找到并挂载一个文件系统才可以成功完成系统的引导过程。在grub中提供了一个选项“root=”用来指定第一个文件系统,但随着硬件的发展,很多情况下这个文件系统也许是存放在USB设备,SCSI设备等等多种多样的设备之上,如果需要正确引导,USB或者SCSI驱动模块首先需要运行起来,可是不巧的是,这些驱动程序也是存放在文件系统里,因此会形成一个悖论。转载 2020-06-23 19:51:04 · 344 阅读 · 0 评论 -
TI Davinci 五年七宗罪
FROM:https://www.cnblogs.com/fpga/archive/2012/09/16/2687822.html引言:芯片是产业链上游重要的一个环节,一颗小小的芯片具有极高的技术含量和价值,半导体行业每年都会有一个各大厂商营业额的排名,除去2009年,常年盘踞在前三名位置的分别是英特尔,三星半导体和德州仪器,英特尔凭借的是桌面处理器,三星半导体凭借的是其全面的存储器产品线,德州仪器则是凭借模拟器件,嵌入式处理器和无线半导体这“三驾马车”。(注:DLP应隶属于光电器...转载 2020-05-24 23:28:46 · 628 阅读 · 1 评论 -
ARM交叉编译工具链分类说明
转载整理自:http://www.veryarm.com/cross-tools从授权上,ARM交叉编译工具链分为免费授权版和付费授权版。免费版目前有三大主流工具商提供,第一是GNU(提供源码,自行编译制作),第二是Codesourcery,第三是Linora。收费版有ARM原厂提供的armcc、IAR提供的编译器等等,因为这些价格都比较昂贵,不适合学习用户使用,所以不做讲述。·...转载 2020-02-23 22:07:45 · 1149 阅读 · 0 评论 -
Linux kernel mmc 框架说明,包括mmc_test使用方法
FROM:https://blog.csdn.net/kivy_xian/article/details/53333831请看原文,排版看得方便,转载留作记录,谢谢kivy_xian1.Linux 总线模型Linux下的任何驱动在内核中最终都抽象为bus, driver以及device三者间的相互作用。总线是处理器和一个或多个设备之间的通道,在设备模...转载 2019-11-08 18:40:53 · 1227 阅读 · 1 评论 -
pr_debug、dev_dbg等动态调试一
FROM:http://www.cnblogs.com/pengdonglin137/p/4621576.html内核版本:Linux-3.14作者:彭东林邮箱:pengdonglin137@163.com pr_debug:#if defined(CONFIG_DYNAMIC_DEBUG)/* dynamic_pr_debug()转载 2017-02-24 14:57:12 · 1990 阅读 · 0 评论 -
【韦东山驱动代码移植高通平台之十四】通过定时器上报键值
通过定时器上报键值定时器两要素:超时时间和超时处理函数通过init_timer初始化一个timer_list,然后指定超时处理函数在中断处理函数里调用mod_timer指定多少时间后执行超时处理函数参考代码:#include <linux/module.h>#include <linux/init.h>#include <linux/m...原创 2019-03-23 10:43:17 · 176 阅读 · 0 评论 -
【韦东山驱动代码移植高通平台之十三】通过工作队列上报键值
通过工作队列上报键值共享队列通过INIT_WORK填充一个work_struct在中断里用schedule_work将任务提交到共享队列共享队列参考代码#include <linux/module.h>#include <linux/init.h>#include <linux/major.h>#include <linu...原创 2019-03-23 10:42:40 · 277 阅读 · 0 评论 -
【韦东山驱动代码移植高通平台之十二】通过tasklet上报键值
通过tasklet上报键值通过tasklet_init初始化一个tasklet_struct,在中断处理函数里用tasklet_schedule来调度执行指定的tasklet参考代码#include <linux/module.h>#include <linux/init.h>#include <linux/major.h>#include ...原创 2019-03-23 10:42:07 · 177 阅读 · 0 评论 -
【韦东山驱动代码移植高通平台之十一】 通过input子系统上报按键值
通过input子系统上报按键值自己写得按键驱动程序只能自己用,其它应用程序想使用的话必须修改代码。linux系统大部分按键类驱动程序,都是使用input子系统来上报输入事件的。所以只要将按键的驱动程序融入到input子系统的框架里,很多应用程序直接就可以使用。一般的方法是(分配 设置 注册)通过input_allocate_device分配一个input_dev结构体设置这个in...原创 2019-03-23 10:41:06 · 642 阅读 · 0 评论 -
【韦东山驱动代码移植高通平台之十】ioctl通过指针返回按键值
ioctl通过指针返回按键值ioctl也可以通过指针返回数据。ioctl第三个参数可以是一个指针,通过指针可以向ioctl调用传递任意数据,这样设备可以喝用户空间交换任意数据量的数据。参考代码#include <linux/module.h>#include <linux/init.h>#include <linux/major.h>#inc...原创 2019-03-21 19:40:14 · 502 阅读 · 0 评论 -
【韦东山驱动代码移植高通平台之九】 通过ioctl返回值读取按键值
通过ioctl返回值读取按键值有的驱动程序不仅需要读取或者写入设备,还需要执行各种类型的硬件控制。比如设置串口的波特率,弹出介质等操作。这些操作通常通过ioctl实现。ioctl的系统调用原型如下SYNOPSIS#include <sys/ioctl.h>int ioctl(int d, int request, ...);改函数原型中的这些点并不是表示数目不...原创 2019-03-21 19:39:28 · 567 阅读 · 0 评论 -
【韦东山驱动代码移植高通平台之二十】结构体的使用
结构体的使用将设备相关变量用结构体实现,用device tree 注册设备的地址 中断 key用平台设备驱动实现结构是一个或多个变量的集合,这些变量可以有不同的类型,为了方便处理将这些变量组织在一个名字之下。第十一个驱动程序里定义了许多静态全局变量static int irq;static struct input_dev *kinput;volatile unsigne...原创 2019-03-23 10:46:23 · 202 阅读 · 0 评论 -
【韦东山驱动代码移植高通平台之八】通过异步通知读取按键值
通过异步通知读取按键值阻塞型和非阻塞型组合以及select和poll方法可以有效地查询设备,但是在有的时候效率就不高了。假设一个进程在低优先级执行很长的计算,但又需要尽快地处理输入数据。可以让程序周期性地调用poll方法,但是在很多场景下还有更好的办法。通过使用异步通知,进程可以在数据有效时收到一个信号,而不需要不停地使用poll来关注数据。为了可以使用异步通知,需要在驱动的file_...原创 2019-03-21 19:38:27 · 218 阅读 · 2 评论 -
【韦东山驱动代码移植高通平台之十五】互斥量
互斥量这里用互斥量来保证每次只有第一个访问到该设备的应用程序才能正常访问到设备,后续设备只有在之前的设备释放互斥量后才能正常访问到设备在open设备时用mutex_lock上锁,在close设备时用mutex_unlock来释放锁参考代码#include <linux/module.h>#include <linux/init.h>#includ...原创 2019-03-23 10:43:53 · 195 阅读 · 0 评论 -
【韦东山驱动代码移植高通平台之十六】信号量
信号量在打开设备时通过down_interruptible获得信号量,在关闭设备时通过up释放信号量参考代码#include <linux/module.h>#include <linux/init.h>#include <linux/major.h>#include <linux/cdev.h>#include <lin...原创 2019-03-23 10:44:23 · 171 阅读 · 0 评论 -
高通平台dtb文件的加载过程
高通平台dtb文件的加载过程高通平台对dts的两种打包方式zImage-dtbdt.imgzImage-dtb方式zImage-dtb的编译二进制文件查看lk的加载过程代码分析dt.img方式dt.img的编译lk的加载过程新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyP...原创 2019-09-20 22:30:45 · 5096 阅读 · 1 评论 -
ARM V8架构
[译] ARM架构入门FORM;https://www.jianshu.com/p/4b37b4c1e8b7Arm架构构成了每个Arm处理器的基础。 ARM架构基于RISC(精简指令集计算机)原则,同时也包含:统一的寄存器文件加载/存储(load/store)结构,其中数据处理仅对寄存器内容进行操作,而不直接对存储器内容进行操作。 简单寻址模式,所有的加载/存储地址只能由寄存器内容和...转载 2019-07-14 11:47:55 · 4703 阅读 · 0 评论 -
【驱动代码移植高通平台之二十三】高通平台i2c设备驱动
原理图分析假如该器件连接到GPIO18和GPIO19,查阅MSM8917的手册知道连接的i2c控制器为5i2c控制器的配置根据80-NU767-1 H文档进行配置1 kernel里配置i2c_5: i2c@7af5000 { /* BLSP2 QUP1 */compatible = "qcom,i2c-msm-v2";#address-cells = <1&...原创 2019-04-02 21:25:41 · 3387 阅读 · 0 评论 -
【韦东山驱动代码移植高通平台之二十二】sysfs节点的创建
sysfs节点的创建sysfs节点也可以用来导出内核测信息,通过还是也可以有用户空间写入数据。使用device_create_file可以创建一个sysfs节点出来也可以使用sysfs_create_group来创建一个sysfs目录,该目录下可以一次性创建一个或者多个文件节点出来。如果需要多个节点的话,这种创建方式效率比较高。#include <linux/module....原创 2019-04-02 21:25:12 · 754 阅读 · 0 评论 -
【韦东山驱动代码移植高通平台之二十一】proc节点的创建
proc节点的创建proc是一种特殊的,由软件创建的文件系统。内核可以使用它向外界导出信息,还可以由用户写入数据。使用proc_create函数来创建节点传入的file_operations结构体需要用户来定义,定义open, read, write等函数参考代码一#include <linux/module.h>#include <linux/in...原创 2019-04-02 21:24:36 · 478 阅读 · 0 评论 -
【韦东山驱动代码移植高通平台之三】自动创建设备节点
自动创建设备节点android的ueventd守护进程会对”/sys/class““/sys/block”“/sys/devices”三个目录扫描,打开所有子目录中的uevent属性文件,写入"add"命令,然后驱动会发出uevent事件,ueventd进程捕捉到后,自动创建设备节点。所以可以通过class_create创建一个类,这个类会在”/sys/class“目录下显示,然后在...原创 2019-03-21 19:28:02 · 445 阅读 · 0 评论 -
韦东山驱动代码移植高通平台总论
将韦东山视频的代码在高通平台上移植,所有的代码参考韦东山一期驱动部分以及二期驱动,代码的扩充也是根据韦东山老师视频里的思路逐步的深入,由浅入深平台:MSM8917 32位内核版本:3.18.31操作系统:ubuntu12.04Android版本:7.1.21 驱动的编译1.a 直接编译到内核修改Makefile,在Makefile里添加(假设源文件名为foo)...原创 2019-04-06 13:21:46 · 851 阅读 · 0 评论 -
【韦东山驱动代码移植高通平台之十七】原子变量
原子变量像i++这类操作,有的处理器可以以原子方式执行增加,但是我们不能指望它。完整的锁机制对一个整数来讲有点浪费,内核提供了一种以原子方式来操作整数类型,就是原子变量。参考代码#include <linux/module.h>#include <linux/init.h>#include <linux/major.h>#include...原创 2019-03-23 10:44:58 · 153 阅读 · 0 评论