- 博客(38)
- 资源 (23)
- 收藏
- 关注
原创 英飞凌TC377之flash、UCB、HSM
TC3xx芯片最多有6个内核,每个核有自己的私有的Memory以及共有的Memory。私有的:PSPR, DSPR, PCache, DCache, DLMU, LPB。PSPR主要用来运行RAM Code,比如说有些代码要放到RAM里面运行。DSPR主要当成SRAM来用,比如用来存放全局变量。每个内核可以通过私有的SPB总线访问自己私有的3M的Local PFlash Bank。共有的:其他核可以通过SRI总线访问其他核的私有Memory。
2025-02-25 11:20:18
1116
原创 使用Matlab/Simulink进行Autosar软件组件(SWC)级设计与开发、Autosar系统级设计与配置(ASW)
MATLAB是美国MathWorks公司出品的商业数学软件,
2024-11-29 10:10:07
689
原创 S32K3学习笔记03-S32K3之eMIOS、MCAL配置(转载)
这几天简单的学习了一下K3的eMIOS,这应该也算是K3相比较K1的一个大升级吧,因为eMIOS比FlexTimer强,常常得用它来进行信号测量啊,PWM波生成啊之类的。下面就简单的介绍一下这个模块吧。下面两个表对eMIOS的资源情况做了简单详尽的介绍,大家仔细观看。可以看到每个eMIOS模块都有24个通道(UC),这些通道都是相互独立的且又是互相配合,但是这些通道在结构上并不是一模一样,而是分成了4种通道类型,分别是TypeX,TypeY,TypeG,TypeH。
2023-11-09 15:52:36
1176
原创 linux进程间信号量通信IPC(sem)、mmap文件内存映射(进程间文件共享)
信号量是一种用于提供不同进程间或一个从给定进程的不同线程间同步手段的原语。
2023-09-21 14:20:59
334
原创 ZMQ协议
普通的socket是端对端的关系,ZMQ是N:M的关系,socket的连接需要显式地建立连接,销毁连接,选择协议(TCP/UDP)和错误处理,ZMQ屏蔽了这些细节,像是一个封装了的socket库,让网络编程变得更简单。ZMQ不光用于主机与主机之间的socket通信,还可以是线程和进程之间的通信。ZMQ提供的套接字可以在多种协议中传输消息,线程间,进程间,TCP等。可以使用套接字创建多种消息模式,如‘请求-应答模式’,‘发布-订阅模式’,‘分布式模式’等。
2023-09-21 09:43:24
1422
原创 双核Lock-Step、SVN
svn checkout path(path是服务器 上的目录)例如:svn checkout svn://192.168.1.1/pro/domain简写:svn co。
2023-04-06 13:17:18
1798
1
原创 malloc和calloc申请内存与释放、内存池的用法
这些因为需要申请内存的时候不知道大小,所以只能申请成指针形式的,在uci_getvalue中申请的内存,在函数内部没有释放,所以在web_wifi_mode_set调用的时候去释放。申请过的内存一定要释放。用calloc在函数内部申请的指针return到函数外,然后在另外一个函数外释放,这种操作是可行的。与malloc唯一的区别是在于calloc在返回地址之前将申请的空间全部初始化为0。1、用calloc申请的内存如果作为返回值的话,可以在外面释放。2、内存的申请malloc和calloc。........
2022-08-11 11:33:37
2220
原创 路由器web网页管理界面goahead和Lighttpd、jQuery(JavaScript(js)众多框架中的比较老的一个)、超文本标记语言html
1、超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言。您可以使用 HTML 来建立自己的 WEB 站点,HTML 运行在浏览器上,由浏览器来解析。2、HTML 是用来描述网页的一种语言:3、HTML 标签详细语法请参考菜鸟教程:https://www.runoob.com/html/html-basic.html...................................................
2022-06-17 14:49:53
1986
原创 Linux 消息队列
系统建立IPC通讯(如消息队列、共享内存等) 必须指定一个ID值。通常情况下,该id值通过ftok函数得到。ftok原型如下:函数作用: convert a pathname and a project identifier to a System V IPC key, Key可用于msgget, semget, or shmget的key参数.........
2022-06-16 10:10:45
804
原创 怎样编译首次拿到的kernel源码
1、编译前的操作cp arch/x86/configs/x86_64_defconfig .configapt-get install libelf-devapt-get install libssl-devapt-get install libx11-dev libxext-dev libxtstdev修改.config文件中CONFIG_DRM_I915=y 改为# CONFIG_DRM_I915 is not set编译指令:make -j12、depends on AIC_
2022-05-31 13:58:44
1095
原创 DNS、DHCP专业解释、dnsmasq
1、概述**域名系统(Domain Name System, DNS)**是因特网的一项基础服务。它作为将域名和IP 地址相互映射的一个分布式数据库,能够使人通过域名来更方便地访问互联网中的主机。**动态主机配置协议(Dynamic Host Configuration Protocol, DHCP)**是局域网的基础服务, DHCP 是一种动态地向网络终端主机提供配置参数的协议,能够简化网络的管理。...
2022-05-26 14:50:48
3330
原创 WiFi模块 driver驱动框架(sdio接口、pcie接口)
1、WiFi driver驱动框架应用层BSD socket层TCP/IP协议层IP层网络设备层MAC层(802.11)(包括扫描、认证、关联、省电状态)设备驱动层2、SDIO-Wifi模块1、SDIO-Wifi模块介绍SDIO-Wifi模块是基于SDIO接口的符合WiFi无线网络标准的嵌入式模块,内置无线网络协议IEEE802.11协议栈以及TCP/IP协议栈,能够实现用户主平台数据通过SDIO口到无线网络之间的转换。SDIO具有传输数据快,兼容SD、MMC接口等特点。对于SD
2022-05-25 15:26:03
7073
原创 应用层app怎样操作底层设备驱动(Linux应用编程)
1、系统介绍sysfs 是一个基于内存的文件系统, 同 devfs、 proc 文件系统一样,称为虚拟文件系统; 它的作用是将内核信息以文件的方式提供给应用层使用。proc 文件系统, 应用层可以通过proc 文件系统得到系统信息和进程相关信息,与 proc 文件系统类似, sysfs 文件系统的主要功能便是对系统设备进行管理,它可以产生一个包含所有系统硬件层次的视图。sysfs 文件系统挂载在/sys 目录下。包括 block、 bus、 class、 dev、 devices、 firmware、
2022-04-12 17:55:05
706
原创 socket网络编程(二)(tcp udp)
1、socket大概介绍socket编程是网络常用的编程,我们通过在网络中创建socket关键字来实现网络间的通信。目前,开发者开发出了很多封装的类来完善socket编程,都是更加方便的实现刚开始socket通信的各个环节,所以我们首先必须了解socket的通信原理,只有从本质上理解socket的通信,才可能快速方便的理解socket的各个环节,才能从底层上真正的把握。2、TCP/IP协议要理解socket必须的得理解tcp/ip,它们之间好比送信的线路和驿站的作用,比如要建议送信驿站,必须得了解送
2022-04-12 15:06:55
5181
原创 无线专题 PCI接口与PCIe接口
**1、PCI接口**1、一个典型的桌面系统PCI架构如下图:如图,桌面系统一般只有一个Host Bridge用于隔离处理器系统的存储器域与PCI总线域,并完成处理器与PCI设备间的数据交换。每个Host Bridge单独管理独立的总线空间,包括PCI Bus, PCI I/O, PCI Memory, and PCIPrefetchable Memory Space。桌面系统也一般只有一个Root Bridge,每个Root Bridge管理一个Local Bus空间,它下面挂载了一颗PCI总
2022-04-07 11:52:32
3450
原创 无线专题 osi模型、TCP/IP五层模型、网络编程(一)
**一、OSI介绍**1、OSI的来源OSI(Open System Interconnect),即开放式系统互联。 一般都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互连模型。ISO为了更好的使网络应用更为普及,推出了OSI参考模型。其含义就是推荐所有公司使用这个规范来控制网络。这样所有公司都有相同的规范,就能互联了。2、OSI七层模型的划分OSI定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层、应用层),即ISO开放互连系统参考模型。如
2022-04-06 11:19:42
2107
原创 无线专题 路由器和交换机、光猫的区别
**1、路由器和交换机的区别**主要的区别体现在一下几个方面:(1)外形上:从外形上我们区分两者,交换机通常端口比较多看起来比较笨重,而路由器的端口就少得多体积也小得多,实际上右图并不是真正的路由器只是集成了路由器的功能,除此之外还有交换机的功能(LAN口就是作为交换机的端口来使用,WAN是用于连接外网的端口),而两个天线则是无线AP接入点(即是通常所说的无线局域网wifi)。(2)工作层次不同:最初的交换机工作在OSI开放式系统互联模型的数据链路层,也就是第二层,而路由器则工作在OSI模型
2022-04-06 10:50:05
3741
2
原创 无线专题 WAN口和LAN口、WLAN和WiFi区别
**1、简单来说WAN端口用于外网,LAN端口用于内网。**如果你要连接公司局域网,可以用WAN端口拉网线连过去;如果你要连接学校局域网,可以用WAN端口拉网线连过去;如果你要连接运营商,可以用WAN端口拉网线连到猫/光猫上去;LAN端口连接你自己的设备,笔记本/台式机/打印机等;无线路由器配置的wifi则相当于LAN端口,连接自己的无线设备,手机/ipad/笔记本等;当WAN端口连上外网,LAN端口上的各个设备和路由器一起组成了一个小型局域网,这个局域网内的设备可以互相发现,访问。普通路
2022-04-06 09:21:59
7207
原创 makefile kconfig 脚本使用技巧
1、当一个项目使用某个外设功能,而其他项目不使用时,可以用以下代码定义config CONFIG_LCD_BACKLIGHT tristate default y if LCD_BACKLIGHT=y help Say yes here to support the LCD BACKLIGHT GPIO device在使用这个外设功能的项目的deconfig中写:CONFIG_LCD_BACKLIGHT=y这时在其他项目的deconfig中不需要加 # CONFIG_LCD_BAC
2022-01-12 15:31:10
246
原创 在linux下,使用socketpair函数能够创建一对套节字进行进程间通信(线程间也可以用)(IPC)
在linux下,使用socketpair函数能够创建一对套节字进行进程间通信(IPC)。#include <sys/types.h>#include <sys/socket.h>int socketpair(int domain, int type, int protocol, int sv[2]);参数1(domain):表示协议族,在Linux下只能为AF_LOCAL或者AF_UNIX。(自从Linux 2.6.27后也支持SOCK_NONBLOCK和SOCK_CLO
2022-01-06 10:05:30
258
原创 Linux设备驱动——内核定时器timer
内核定时器使用内核定时器是内核用来控制在未来某个时间点(基于jiffies)调度执行某个函数的一种机制,其实现位于 <Linux/timer.h> 和 kernel/timer.c 文件中。内核定时器的调度函数运行过一次后就不会再被运行了(相当于自动注销),但可以通过在被调度的函数中重新调度自己来周期运行。内核定时器的数据结构struct timer_list { struct list_head entry; unsigned long expires; vo
2021-12-14 14:31:04
1781
原创 内存管理单元MMU 物理地址与虚拟地址 ioremap
MMU 主要完成的功能如下:①、完成虚拟空间到物理空间的映射。②、内存保护,设置存储器的访问权限,设置虚拟存储空间的缓冲特性。我们重点来看一下第①点,也就是虚拟空间到物理空间的映射,也叫做地址映射。对于 32 位的处理器来说,虚拟地址范围是 2^32=4GB,我们的开发板上有 512MB 的 DDR3,这 512MB 的内存就是物理内存,经过 MMU 可以将其映射到整个 4GB 的虚拟空间,如图 41.1.1 所示:物理内存只有 512MB,虚拟内存有 4GB,那么肯定存在多个虚拟地址映射到同一
2021-12-02 17:26:55
1008
原创 linux驱动阻塞与非阻塞式IO 等待队列机制(init_waitqueue_head) 轮询方式(poll 函数)异步通知(信号signal)可理解为软件中断、信号signal
阻塞和非阻塞 IO 是 Linux 驱动开发里面很常见的两种设备访问模式,在编写驱动的时候一定要考虑到阻塞和非阻塞。本章我们就来学习一下阻塞和非阻塞 IO,以及如何在驱动程序中处理阻塞与非阻塞,如何在驱动程序使用等待队列和 poll 机制。阻塞和非阻塞简介**二、等待队列**在 Linux 驱动程序中,可以使用等待队列(wait queue)来实现阻塞进程的唤醒。wait queue 很早就作为一个基本的功能单位出现在 Linux 内核里了,它以队列为基础数据结构,与进程调度机制紧密结合,能够用
2021-12-01 13:28:05
3250
原创 linux驱动并发与竞争 原子操作(atomic_t)自旋锁(spinlock_t)信号量(semaphore)互斥体(mutex)
Linux是一个多任务操作系统,肯定会存在多个任务共同操作同一段内存或者设备的情况,多个任务甚至中断都能访问的资源叫做共享资源,就和共享单车一样。在驱动开发中要注意对共享资源的保护,也就是要处理对共享资源的并发访问。多个任务同时访问同一片内存区域,这些任务可能会相互覆盖这段内存中的数据,造成内存数据混乱。现在的 Linux 系统并发产生的原因很复杂,总结一下有下面几个主要原因:①、多线程并发访问, Linux 是多任务(线程)的系统,所以多线程访问是最基本的原因。②、抢占式并发访问,从 2.6 版本内
2021-11-30 13:37:32
1988
原创 如何创建字符设备char(注册主次设备号)以及生成设备节点
**自动创建节点**在驱动中加入对 udev 的支持(自动创建设备节点)的主要做法是:在驱动初始化的代码里调用 class_create() 为该设备创建一个 class,再为每个设备调用 device_create() 创建对应的设备。内核中定义的 struct class 结构体,顾名思义,一个 struct class 结构体类型的变量对应一个类,内核同时提供了 class_create() 函数,可以用它来创建一个类(class),这个类(class)存放在 sysfs 下面,一旦创建好了这
2021-11-26 13:18:38
854
原创 linux系统把驱动编译成.ko模块 insmod动态加载
介绍:Linux 驱动有两种运行方式,第一种就是将驱动编译进 Linux 内核中,这样当 Linux 内核启动的时候就会自动运行驱动程序。第二种就是将驱动编译成模块(Linux 下模块扩展名为.ko),在Linux 内核启动以后使用“insmod”命令加载驱动模块。在调试驱动的时候一般都选择将其编译为模块,这样我们修改驱动以后只需要编译一下驱动代码即可,不需要编译整个 Linux 代码。而且在调试的时候只需要加载或者卸载驱动模块即可,不需要重启整个系统。总之,将驱动编译为模块最大的好处就是方便开发,当驱动
2021-11-19 10:39:22
7026
原创 高通平台9x07linux系统i2c调试经验
如果还没有加载设备只是单纯看i2c通不通,可以用一下方法:dts配置只使能i2c-2就可以i2c_2: i2c@78b6000 { /* BLSP1 QUP4 */ compatible = "qcom,i2c-msm-v2"; #address-cells = <1>; #size-cells = <0>; reg-names = "qup_phys_addr"; reg = <0x78b6000 0x600>; interrupt-name
2021-11-17 16:55:31
984
原创 对高通平台pin(包括gpio)的一点理解、pincontrol子系统、gpio 子系统
以mdm9x07为例/sys/class/gpio # cat /sys/kernel/debug/gpiocat /sys/kernel/debug/gpioGPIOs 0-79, platform/1000000.pinctrl, 1000000.pinctrl: gpio0 : out 0 4mA no pull gpio1 : in 0 2mA pull down gpio2 : in 0 2mA pull down gpio3 : in 0 2mA pull d
2021-10-13 17:25:48
2568
原创 linux中mount硬链接和ln软连接的区别
1、mount,ln 为硬连接,ln -s为软连接2、Linux软链接是一个文件的别名引用,修改软链接不会影响原始文件,类似于windows的快捷链接。Linux挂载是把磁盘文件目录挂载到指定的目录,修改目录中的内容,原始文件收到变更。区别:mount操作的对象是设备;Ln的操作对象是文件mount常用来挂载硬盘或者flash等存储设备ln常用来做链接,比如设置用户指定的python版本而不影响系统其他用户...
2021-09-17 16:56:12
1876
原创 linux下 /proc /sys目录的区别(sysfs、procfs都是虚拟文件系统)、rootfs
/sys/devices 下是所有设备的真实对象,包括如视频卡和以太网卡等真实的设备.可以看到真正运行了哪些设备,从而可以推断出用到哪些驱动文件,例如:/sys/devices/1000000.pinctrl/gpio 该设备下创建的真实可用的GPIO,没有创建的不会显示/sys/class/gpio中也是真实可用的GPIO调试GPIO的时候可以进入到/sys/class/gpio路径,单独操作单个GPIO拉高拉低,然后外部量/proc/device-tree 下对应的是设备树文件,设备树中
2021-08-25 19:51:24
2642
原创 怎样用模拟串口uart发送字符串
1、首先用sprintf格式化字符串,可以把需要打印的变量的值也放进去。然后用模拟串口发送。2、例如:void gnss_app_output_nmea(char *nmea_buffer){ int32_t checksum = 0; char temp_buffer[MNL_SERVICE_MAX_DATA_LEN] = {0}; checksum = gnss_app_get_command_checksum((int8_t*)nmea_buffer, strlen(nme
2021-08-16 13:50:08
1936
原创 Cortex-M可以跑Linux操作系统吗?
ARM和Cortex-MARM处理器的体系结构定义了指令集(ISA)和基于这一体系结构下处理器的模型。ARM的指令集从ARMv1发展到今天的ARMv9,每一次体系结构的修改都会添加实用技术。![在这里插入图片描述](https://img-b...
2021-07-29 10:58:29
1403
原创 linux系统中I2C总线匹配过程详解、initcall机制
转载自:https://www.cnblogs.com/downey-blog/p/10493216.htmli2c总线的初始化分析i2c框架自然是从i2c总线的初始化开始,一切内核中i2c的相关操作都将建立在i2c总线的基础上。在实际驱动开发过程中,i2c总线也是集成在系统中的,驱动开发者不需要关心i2c总线的初始化,只需要将相应的i2c_client和i2c_driver挂载在总线上进行匹配即可。将总线注册到系统那么,i2c总线在系统中是如何初始化得来的呢?答案就在文件i2c-core-ba
2021-07-09 11:45:58
1779
1
原创 source insigh配置实现支持查看设备树、Makefile、Kconfig以及.s、shell 脚本文件办法
1、source insight 增加设备树类型文件dts参考链接:https://blog.youkuaiyun.com/nicholas_duan/article/details/1075441752、sourceinsight支持查看makefile、kconfig以及.s代码的方法参考链接:https://blog.youkuaiyun.com/xieyi2015/article/details/78231298.........
2021-07-08 20:18:12
1433
RM0436 Reference manual --- STM32M157寄存器描述 中文
2022-04-29
STM32F0片上外设培训手册中文
2022-04-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人