linux
文章平均质量分 77
keep_1024
这个作者很懒,什么都没留下…
展开
-
MTK wifi驱动源码分析
1、驱动加载入口module_init(wifi_drv_init_module);module_exit(wifi_drv_cleanup_module);完成对驱动的注册调用static int __init wifi_drv_init_module(void){ int status = 0; os_module_init();#ifdef RTMP_PCI_SUPPORT status = rt_pci_init_module(); if (st...原创 2021-12-07 15:34:31 · 3552 阅读 · 0 评论 -
linux驱动字符设备class_create、device_create
1 class结构体介绍 内核中定义了struct class结构体,顾名思义,一个struct class结构体类型变量对应一个类,内核同时提供了class_create(…)函数,可以用它来创建一个类,这个类存放于sysfs下面,一旦创建好了这个类,再调用device_create(…)函数来在/dev目录下创建相应的设备节点。这样,加载模块的时候,用户空间中的udev会自动响应device_create(…)函数,去/sysfs下寻找对应的类从而创建设备节点。2 class_create..原创 2021-05-07 20:10:32 · 2226 阅读 · 0 评论 -
Linux驱动字符设备分析misc_register、register_chrdev
杂项设备(misc device)杂项设备也是在嵌入式系统中用得比较多的一种设备驱动。使用misc_register(&ff_wdt_miscdev); 在 Linux 内核的include/linux目录下有Miscdevice.h文件,要把自己定义的misc device从设备定义在这里。其实是因为这些字符设备不符合预先确定的字符设备范畴,所有这些设备采用主编号10,一起归于misc device,其实misc_register就是用主标号10调用register_chrdev()的...原创 2021-05-07 11:54:31 · 5378 阅读 · 0 评论 -
Linux 内核的驱动函数解析
几乎每一种外设都是通过读写设备上的寄存器来进行的,通常包括控制寄存器、状态寄存器和数据寄存器三大类,外设的寄存器通常被连续地编址。根据CPU体系结构的不同,CPU对IO端口的编址方式有两种:(1)I/O映射方式(I/O-mapped)典型地,如X86处理器为外设专门实现了一个单独的地址空间,称为"I/O地址空间"或者"I/O端口空间",CPU通过专门的I/O指令(如X86的IN和OUT指令)来访问这一空间中的地址单元。(2)内存映射方式(Memory-mapped) RISC指令系统的.原创 2021-04-29 16:15:00 · 370 阅读 · 0 评论 -
Linux 网桥配置br-lan、eth0、eth1、ra0、rai0
Linux网关模式下将有线LAN和无线LAN共享网段实现局域网内互联:思路其实很简单:就是将虚拟出一个bridge口,将对应的有线LAN和无线LAN都绑定在这个虚拟bridge口上,并给这个bridge口分配一个地址,其他子网微机配置网关为bridge口的地址便可以了。当然,因为是设备是网关模式,路由和nat也是必须的了。如果设备本身便是网桥模式,那么路由和nat便可以省掉了。Linux 网桥配置br-lan、eth0、eth1、ra0、rai0如果你的设备含有不少于1个的LAN接口,那这个设备原创 2021-03-26 11:27:08 · 18351 阅读 · 1 评论 -
openwrt编译流程分析
最近开始整5G CPE项目,系统基于OpenWrt,打算详细研究了一下整个工程的构建过程,记录一下:编译过程概述编译的总体过程如下:1.编译host工具2.编译交叉工具链3.编译内核模块4.编译ipk5.安装ipk到文件系统6.编译内核7.将内核和文件系统组合成最终binary1. 编译host工具虽然我们在开始编译前已经安装了一些必要的工具,但编译过程中还需要其他一些主机工具。这部分工具将首先编译。2. 编译交叉工具链openwrt自带交叉编译链,当然在原创 2021-02-18 16:20:54 · 6551 阅读 · 0 评论 -
linux iptables 基础知识及用法规则
iptables [-t table] 指定规则表-t 参数用来,内建的规则表有三个,分别是:nat、mangle 和filter,当未指定规则表时,则一律视为是filter。个规则表的功能如下:nat:此规则表拥有PREROUTING 和POSTROUTING 两个规则链,主要功能为进行一对一、一对多、多对多等网址转换工作(SNAT、DNAT),这个规则表除了作网址转换外,请不要做其它用途。mangle:此规则表拥有PREROUTING、FORWARD 和POSTROUTING 三...转载 2020-12-31 14:07:25 · 705 阅读 · 0 评论 -
Linux内核系统由哪些部分组成的
Linux内核的组成:Linux内核主要由五个子系统组成:进程调度,内存管理,虚拟文件系统,网络接口,进程间通信。Linux内核源代码的目录结构Linux内核源代码包含如下目录。arch:包含和硬件体系结构相关的代码,每种平台占一个相应的目录,如i386、arm、arm64、powerpc、mips等。Linux内核目前已经支持30种左右的体系结构。在arch目录下,存放的是各个平台以及各个平台的芯片对Linux内核进程调度、内存管理、中断等的支持,以及每个具体的SoC和电路板的板级支持代码转载 2020-12-30 15:34:15 · 9416 阅读 · 1 评论 -
Linux驱动mmap内存映射
Linux驱动mmap内存映射mmap在linux哪里?什么是mmap?上图说了,mmap是操作这些设备的一种方法,所谓操作设备,比如IO端口(点亮一个LED)、LCD控制器、磁盘控制器,实际上就是往设备的物理地址读写数据。但是,由于应用程序不能直接操作设备硬件地址,所以操作系统提供了这样的一种机制——内存映射,把设备地址映射到进程虚拟地址,mmap就是实现内存映射的接口。操作设备还有很多方法,如ioctl、ioremapmmap的好处是,mmap把设备内存映射到虚拟内存,则用户转载 2020-12-30 11:44:27 · 217 阅读 · 0 评论 -
Linux内存分配函数kmalloc、kzalloc、vmalloc、get_free_pages、malloc的区别
简单的说:kmalloc和vmalloc是分配的是内核的内存,malloc分配的是用户的内存 kmalloc保证分配的内存在物理上是连续的,vmalloc保证的是在虚拟地址空间上的连续,malloc不保证任何东西(这点是自己猜测的,不一定正确) kmalloc能分配的大小有限,vmalloc和malloc能分配的大小相对较大 内存只有在要被DMA访问的时候才需要物理上连续 vmalloc比kmalloc要慢详细的解释: 对于提供了MMU(存储管理器,辅助操作系统进行内存管理...原创 2020-12-30 09:50:44 · 1332 阅读 · 0 评论 -
linux 路由转发及udhcpd的配置上网
海思V711平台4G模组上路由转发配置:1、配置udhcpd.conf文件 vim /etc/udhcpd.confstart 192.168.9.1#定义地址池的开始地址end 192.168.9.254 #定义地址池的结束地址interface gmac0 #dhcp服务器中响应dhcp协议的接口opt dns 8.8.8.8 219.239.26.42#定义dns服务器地址option subnet 255.255.255.0opt router 192...原创 2020-12-28 17:38:43 · 2999 阅读 · 0 评论 -
linux内核的内存映射函数of_iomap和ioremap
of_iomapvoid __iomem *of_iomap(struct device_node *node, int index);通过设备树的设备结点直接进行设备内存区间的 ioremap(),index是内存段的索引。若设备结点的reg属性有多段,可通过index标示要ioremap的是哪一段,只有1段的情况, index为0。采用Device Tree后,大量的设备驱动通过of_iomap()进行映射,而不再通过传统的ioremap。ioremap 几乎每一种...原创 2020-12-25 11:24:09 · 7412 阅读 · 0 评论 -
linux系统堆、栈及内存分配、CPU寄存器
堆和栈:栈主要用来存放局部变量, 传递参数, 存放函数的返回地址.esp 始终指向栈顶, 栈中的数据越多, esp的值越小.堆用于存放动态分配的对象, 当你使用 malloc , new 等进行分配时,所得到的空间就在堆中. 动态分配得到的内存附带有分配信息, 所以你能够 realloc 和 free调它们.全局,静态和常量是分配在数据区中的。数据区包括bss和初始化区。堆向高内存地址生长栈向低内存地址生长堆和栈相向而生,堆和栈之间有个临界点,称为stkbrk内存分配:Linux原创 2020-12-09 17:36:07 · 4003 阅读 · 2 评论 -
嵌入式软件工程师成长方向的思考
最近有点空闲,总结下嵌入式工程师所需要掌握的技能,及成长方向。主体知识:C语言、数据结构 + 算法、linux系统+ linux网络、数据库 、内核编译裁剪+驱动开发一、常用数据结构:平衡二叉树链表栈/队列C方向数据结构二、linux系统:常用的系统命令及工具linux系统的堆和栈、内存分区、虚拟内存 + 物理内存、进程 + 线程 + ipc、死锁、分片机制、五大组件、中断和系统调用 、同步和异步等等问题。三、linux网络:OSI 七层模型和 TCP/IP 四层体.原创 2020-12-08 11:39:59 · 1149 阅读 · 1 评论 -
linux 服务器加装硬盘流程及sda sdb加载顺序
使用中服务器容量不够了,于是准备加装硬盘,步骤如下于是公司加了 500 G 的普通硬盘用于存放不常用的源码。环境:Linux ubuntu 4.11.0-15-generic以下是步骤:1、安装硬盘到服务器中2、查看硬盘情况可以看到 sdb 是我们的第二块硬盘3、对硬盘进行分区fdisk /dev/sdb弹出如下界面:做如下操作: n(新建分区)、 p(基本分期) 、1(表示新建一个分区) 、1-3916(回车默认选择硬盘柱面的起始位置),w(将表写...原创 2020-11-17 19:34:41 · 6223 阅读 · 0 评论 -
NandFlash OOB及UBI文件系统分析
Nand Flash,每一个页,对应一个空闲区域(OOB),这个区域是基于Nand Flash的硬件特性,数据在读写的时候容易出错,为了保证数据的正确性,就产生了这样一个检测和纠错的区域,用来放置数据的校验值。OOB的读写操作,一般都是随着页的操作一起完成,也就是在读写页的时候,对应的OOB就产生了,那么OOB有什么用途呢?1). 标记是否存在坏块1.为什么会出现坏块 由于NAND Flash的工艺不能保证NAND的Memory Array在其生命周期中保持性能的可靠,因此,在NAND的生...原创 2020-11-05 19:37:58 · 1572 阅读 · 0 评论 -
win7无法访问samba(80070035/800704cf/)问题
出现“错误代码:0x800704cf 不能访问网络位置”等提示,而您的工作组的其他机器却可以正常打开和访问这个共享文件夹,出现这种情况主要是Win7的一个已知问题引起的(详细情况请访问http://support.microsoft.com/kb/980486/),解决方法打开"设备管理器",点击"网络适配器",点击菜单查看中的“显示隐藏的设备”,你会发现许多Microsoft ISATAP Adapter # (数字)全部删除后就可以了...原创 2020-10-09 09:14:57 · 818 阅读 · 0 评论 -
adb 出现devices offline的解决方法
1、终端设备adbd 进程是否开启 /sbin/adbd &2、adb 驱动是否正常 更新驱动3、adb版本是否匹配 更新版本以上都正常后执行:adb kill-serveradb start-serveradb remountadb shell...原创 2020-07-27 10:32:07 · 8638 阅读 · 0 评论 -
linux内核空间跟用户空间通信方法
linux驱动程序一般工作在内核空间,但也可以工作在用户空间,内核空间和用户空间之间如何进行通讯?1、系统调用read,write,ioctlA.get_user(x,ptr):在内核中被调用,获取用户空间指定地址的数值并保存到内核变量x中。B.put_user(x,ptr):在内核中被调用,将内核空间的变量x的数值保存到到用户空间指定地址处。C.Copy_from_user()/copy_to_user():主要应用于设备驱动读写函数中,通过系统调用触发。2、虚拟文件系统pr..原创 2020-06-09 16:40:08 · 2421 阅读 · 1 评论