linux 系统
文章平均质量分 64
狮驼岭的小钻风
世界上有10种人,一种是懂二进制的,一种是不懂二进制的
展开
-
source insigh配置实现支持查看设备树、Makefile、Kconfig以及.s、shell 脚本文件办法
1、source insight 增加设备树类型文件dts参考链接:https://blog.csdn.net/nicholas_duan/article/details/1075441752、sourceinsight支持查看makefile、kconfig以及.s代码的方法参考链接:https://blog.csdn.net/xieyi2015/article/details/78231298.........原创 2021-07-08 20:18:12 · 1108 阅读 · 0 评论 -
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 · 732 阅读 · 0 评论 -
怎样编译首次拿到的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 · 830 阅读 · 0 评论 -
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 · 5950 阅读 · 0 评论 -
应用层app怎样操作底层设备驱动(Linux应用编程)
1、系统介绍sysfs 是一个基于内存的文件系统, 同 devfs、 proc 文件系统一样,称为虚拟文件系统; 它的作用是将内核信息以文件的方式提供给应用层使用。proc 文件系统, 应用层可以通过proc 文件系统得到系统信息和进程相关信息,与 proc 文件系统类似, sysfs 文件系统的主要功能便是对系统设备进行管理,它可以产生一个包含所有系统硬件层次的视图。sysfs 文件系统挂载在/sys 目录下。包括 block、 bus、 class、 dev、 devices、 firmware、原创 2022-04-12 17:55:05 · 615 阅读 · 0 评论 -
socket网络编程(二)(tcp udp)
1、socket大概介绍socket编程是网络常用的编程,我们通过在网络中创建socket关键字来实现网络间的通信。目前,开发者开发出了很多封装的类来完善socket编程,都是更加方便的实现刚开始socket通信的各个环节,所以我们首先必须了解socket的通信原理,只有从本质上理解socket的通信,才可能快速方便的理解socket的各个环节,才能从底层上真正的把握。2、TCP/IP协议要理解socket必须的得理解tcp/ip,它们之间好比送信的线路和驿站的作用,比如要建议送信驿站,必须得了解送原创 2022-04-12 15:06:55 · 5091 阅读 · 0 评论 -
无线专题 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 · 3170 阅读 · 0 评论 -
无线专题 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 · 1815 阅读 · 0 评论 -
无线专题 路由器和交换机、光猫的区别
**1、路由器和交换机的区别**主要的区别体现在一下几个方面:(1)外形上:从外形上我们区分两者,交换机通常端口比较多看起来比较笨重,而路由器的端口就少得多体积也小得多,实际上右图并不是真正的路由器只是集成了路由器的功能,除此之外还有交换机的功能(LAN口就是作为交换机的端口来使用,WAN是用于连接外网的端口),而两个天线则是无线AP接入点(即是通常所说的无线局域网wifi)。(2)工作层次不同:最初的交换机工作在OSI开放式系统互联模型的数据链路层,也就是第二层,而路由器则工作在OSI模型原创 2022-04-06 10:50:05 · 3469 阅读 · 1 评论 -
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 · 187 阅读 · 0 评论 -
linux系统应用层和驱动层所使用的延时delay和休眠sleep接口
应用层:sleep(); 休眠原创 2021-12-20 15:06:55 · 940 阅读 · 0 评论 -
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 · 1673 阅读 · 0 评论 -
内存管理单元MMU 物理地址与虚拟地址 ioremap
MMU 主要完成的功能如下:①、完成虚拟空间到物理空间的映射。②、内存保护,设置存储器的访问权限,设置虚拟存储空间的缓冲特性。我们重点来看一下第①点,也就是虚拟空间到物理空间的映射,也叫做地址映射。对于 32 位的处理器来说,虚拟地址范围是 2^32=4GB,我们的开发板上有 512MB 的 DDR3,这 512MB 的内存就是物理内存,经过 MMU 可以将其映射到整个 4GB 的虚拟空间,如图 41.1.1 所示:物理内存只有 512MB,虚拟内存有 4GB,那么肯定存在多个虚拟地址映射到同一原创 2021-12-02 17:26:55 · 839 阅读 · 0 评论 -
linux驱动阻塞与非阻塞式IO 等待队列机制(init_waitqueue_head) 轮询方式(poll 函数)异步通知(信号signal)可理解为软件中断
阻塞和非阻塞 IO 是 Linux 驱动开发里面很常见的两种设备访问模式,在编写驱动的时候一定要考虑到阻塞和非阻塞。本章我们就来学习一下阻塞和非阻塞 IO,以及如何在驱动程序中处理阻塞与非阻塞,如何在驱动程序使用等待队列和 poll 机制。阻塞和非阻塞简介**二、等待队列**在 Linux 驱动程序中,可以使用等待队列(wait queue)来实现阻塞进程的唤醒。wait queue 很早就作为一个基本的功能单位出现在 Linux 内核里了,它以队列为基础数据结构,与进程调度机制紧密结合,能够用原创 2021-12-01 13:28:05 · 2573 阅读 · 0 评论 -
linux驱动并发与竞争 原子操作(atomic_t)自旋锁(spinlock_t)信号量(semaphore)互斥体(mutex)
Linux是一个多任务操作系统,肯定会存在多个任务共同操作同一段内存或者设备的情况,多个任务甚至中断都能访问的资源叫做共享资源,就和共享单车一样。在驱动开发中要注意对共享资源的保护,也就是要处理对共享资源的并发访问。多个任务同时访问同一片内存区域,这些任务可能会相互覆盖这段内存中的数据,造成内存数据混乱。现在的 Linux 系统并发产生的原因很复杂,总结一下有下面几个主要原因:①、多线程并发访问, Linux 是多任务(线程)的系统,所以多线程访问是最基本的原因。②、抢占式并发访问,从 2.6 版本内原创 2021-11-30 13:37:32 · 1811 阅读 · 0 评论 -
如何创建字符设备char(注册主次设备号)以及生成设备节点
**自动创建节点**在驱动中加入对 udev 的支持(自动创建设备节点)的主要做法是:在驱动初始化的代码里调用 class_create() 为该设备创建一个 class,再为每个设备调用 device_create() 创建对应的设备。内核中定义的 struct class 结构体,顾名思义,一个 struct class 结构体类型的变量对应一个类,内核同时提供了 class_create() 函数,可以用它来创建一个类(class),这个类(class)存放在 sysfs 下面,一旦创建好了这原创 2021-11-26 13:18:38 · 749 阅读 · 0 评论 -
linux系统把驱动编译成.ko模块 insmod动态加载
介绍:Linux 驱动有两种运行方式,第一种就是将驱动编译进 Linux 内核中,这样当 Linux 内核启动的时候就会自动运行驱动程序。第二种就是将驱动编译成模块(Linux 下模块扩展名为.ko),在Linux 内核启动以后使用“insmod”命令加载驱动模块。在调试驱动的时候一般都选择将其编译为模块,这样我们修改驱动以后只需要编译一下驱动代码即可,不需要编译整个 Linux 代码。而且在调试的时候只需要加载或者卸载驱动模块即可,不需要重启整个系统。总之,将驱动编译为模块最大的好处就是方便开发,当驱动原创 2021-11-19 10:39:22 · 6382 阅读 · 0 评论 -
怎样查看linux系统cpu型号数量及架构
cat /proc/cpuinfo原创 2021-09-27 09:28:58 · 268 阅读 · 0 评论 -
linux中mount硬链接和ln软连接的区别
1、mount,ln 为硬连接,ln -s为软连接2、Linux软链接是一个文件的别名引用,修改软链接不会影响原始文件,类似于windows的快捷链接。Linux挂载是把磁盘文件目录挂载到指定的目录,修改目录中的内容,原始文件收到变更。区别:mount操作的对象是设备;Ln的操作对象是文件mount常用来挂载硬盘或者flash等存储设备ln常用来做链接,比如设置用户指定的python版本而不影响系统其他用户...原创 2021-09-17 16:56:12 · 1431 阅读 · 0 评论 -
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 · 2070 阅读 · 0 评论