- 博客(74)
- 资源 (87)
- 收藏
- 关注
原创 Linux 设备管理(linux网络协议栈笔记)
Linux 设备管理设备初始化是我们要分析的第三和第四个大步骤,这个部分要涉及到一些设备驱动的背景知识。 设备管理的目标是能对所有的外设进行良好的读、写、控制等操作。但是如果众多设备没有一个统 一的接口,则不利于开发人员的工作。因此 Linux 采用了类似 UNIX 的方法,使用设备文件来实现这个 统一接口。由此可见,设备文件的相关概念是设备管理的最基础部分。 要让操作系统感知到设备的存在,必须
2016-11-30 22:39:55 2398 1
原创 中断及任务调度管理(linux网络协议栈笔记)
中断及任务调度管理Linux 书籍中常说的 BottomHalf 已然不见了,它们被转成 tasklets,这是支持 SMP 的。但其思想基本 一致。 中断及软中断模型我们在此不会对中断及异常的原理和机制做深入的介绍。但必须要作出一些说明,因为这是理解 Linux 内核与其它嵌入式/实时操作系统的不同,以及理解网络协议栈收报文的基础。 Linux 支持 CPU 的外部硬件中断和内部中断。严格来说,内
2016-11-30 17:34:54 1498
原创 内核文件解读(linux网络协议栈笔记)
内核文件解读为了解决 initcall_t到底是什么变量类型则必须提及 C 语言中一个比较少见的内容——可执行文件格 式,只有了解了这种文件格式才能具体知道 initcall_t 的意义。 ELF 文件格式ELF 是*nix 系统上可执行文件的标准格式,它取代了 out 格式的可执行文件,原因在于它的可扩展 性。 ELF 格式的可执行文件可有多个 section。DWARF(Debugging W
2016-11-30 10:34:58 1991
转载 高通 msm平台GPIO相关的device tree设置
GPIO相关的dvice tree设置和interrupt设置gpoi号以及gpio相关的属性设置以tsp的proxy_en端口为例:i2c@78b6000 { /* BLSP1 QUP2 */ compatible = "qcom,i2c-msm-v2"; ... tmd3782@39 { compatible = "taos,tmd3782";
2016-11-30 00:02:21 15798
原创 ARM学习之图解ARM
arm developer’s guide图:嵌入式arm的基本架构 图:应用软件运行在arm硬件上的抽象图 图:arm memory remap 图: arm内容数据流模型 图:arm在用户模式下可用的寄存器 图:图解状态寄存器 图:完整的arm寄存器集合 图: arm指令序列 图: arm指令执行的例子 图: arm向量表 arm中的高速缓冲存储器cache
2016-11-29 23:15:05 7304
转载 Linux内存管理:ARM Memory Layout以及mmu配置
转载:http://blog.csdn.net/hongzg1982/article/details/47341881 在内核进行page初始化以及mmu配置之前,首先需要知道整个memory map。1). ARM Memory Layout1. PAGE_OFFSET Start address of Kernel space `0xC000_0000`2. lowmem Kernel
2016-11-29 22:47:10 4463
转载 用户空间与内核空间数据交换二
内核启动参数Linux 提供了一种通过 bootloader 向其传输启动参数的功能,内核开发者可以通过这种方式来向内核传输数据,从而控制内核启动行为。通常的使用方式是,定义一个分析参数的函数,而后使用内核提供的宏 __setup把它注册到内核中,该宏定义在 linux/init.h 中,因此要使用它必须包含该头文件:__setup("para_name=", parse_func)para_na
2016-11-29 00:21:33 654
转载 adb源码分析
ADB是Android debug bridge的缩写,它使用PC机可以通过USB或网络与android设备通讯。 adb的源码位于system/core/adb目录下,先来看下编译脚本Android.mk: # Copyright 2005 The Android Open Source Project # # Android.mk for adb # LOCAL_PATH:= $
2016-11-28 15:36:23 1478
转载 内核空间和用户空间数据交换一
debugfs内核开发者经常需要向用户空间应用输出一些调试信息,在稳定的系统中可能根本不需要这些调试信息,但是在开发过程中,为了搞清楚内核的行为,调试信息非常必要,printk可能是用的最多的,但它并不是最好的,调试信息只是在开发中用于调试,而printk将一直输出,因此开发完毕后需要清除不必要 的printk语句,另外如果开发者希望用户空间应用能够改变内核行为时,printk就无法实现。因此,需要
2016-11-26 00:34:00 1405
原创 linux usb设备驱动二
urb介绍和定义USB 设备驱动代码通过urb和所有的 USB 设备通讯。 urb用 struct urb 结构描述(include/linux/usb.h )。 urb以一种异步的方式同一个特定USB设备的特定端点发送或接受数据。一个 USB 设备驱动可根据驱动的需要,分配多个 urb 给一个端点或重用单个 urb 给多个不同的端点。设备中的每个端点都处理一个 urb 队列, 所以多个 ur
2016-11-25 23:16:38 1165
原创 fastboot及lk解析
FastBoot协议版本0.4fastboot协议是一种通过USB连接与bootloaders通讯的机制。它被设计的非常容易实现,能够用于多种设备和运行Linux、Windows或者OSX的主机。 基本需求(Basic Requirements) * 两个端点,一个输入端,一个输出端。 * 对于全速(full-speed)USB,最大包尺寸必须是64个字节;
2016-11-25 14:42:06 6864
转载 Linux kernel module加载
设备的内核升级到最新的Linux-3.3上去了,这个版本主要新特性包括:合并了来自Android项目的内核代码,支持新的架构TI C6X,改进了Btrfs文件系统的balance操作、新的除错工具和RAID restripping;新的虚拟网络交换机Open vSwitch;支持EFI引导固件;改进内存管理等,这里我们比较感兴趣的是:更快更具弹性的网络设备接口teaming;通过字节序列限制改进网络
2016-11-25 11:20:44 4010
转载 DEVICE_ATTR的使用
DEVICE_ATTR的使用使用DEVICE_ATTR,可以在sysfs中添加“文件”,通过修改该文件内容,可以实现在运行过程中动态控制device的目的。 类似的还有DRIVER_ATTR,BUS_ATTR,CLASS_ATTR。 他们的区别就是,DEVICE_ATTR对应的文件在/sys/devices/目录中对应的device下面,而其他几个分别在driver,bus,class中对应的目
2016-11-24 22:51:02 1788
原创 linux usb设备驱动一
drivers/usb/中的文件usb-skeleton.c,usb-skeleton是usb驱动的框架,可以通过修改一下部分代码就可一轻松的实现一个简单的设备驱驱动/* * USB Skeleton driver - 2.2 * * Copyright (C) 2001-2004 Greg Kroah-Hartman ([email protected]) * * This program
2016-11-24 22:30:48 995
转载 linux网络协议栈-socket
1、TCP/IP参考模型 为了实现各种网络的互连,国际标准化组织(ISO)制定了开放式系统互连(OSI)参考模型。尽管OSI的体系结构从理论上讲是比较完整的,但实际上,完全符合OSI各层协议的商用产品却很少进入市场。而使用TCP/IP 协议的产品却大量涌入市场,几乎所有的工作站都配有TCP/IP协议,使得TCP/IP 成为计算机网络的实际的国际标准。 2、套接字(socket) soc
2016-11-23 22:39:37 550
原创 linux kernel文件系统
任务管理、内存管理和文件系统是内核最为核心的部分。其中内存管理最为复杂,文件系统最为庞大。内核通过引入虚拟文件系统,从而支持数十种不同的文件系统,不得不让人感叹Linux以及它显示出的开源的力量的强大。虚拟文件系统(Virtual Filesystem),也可以称为虚拟文件系统转换(Virual Filesystem Switch ,简称VFS),是Linux强大的集中体现。Linux通过VFS可以
2016-11-23 21:51:17 1287
转载 linux kerne同步
1、概述 同步问题是操作系统中的经典问题,它伴随着并发处理而自诞生。现代体系结构中常见的并发处理情况可以分为如下三种情况: (1)多个线程在单处理器上执行——多线程编程 (2)多个线程在多处理器上执行——并行计算 (3)多个线程在分布的多个处理上执行——分布式计算 相应的编程也分成三种情况: 共享变量编程、分布式(基于消息)编程和并行编程。 1.1、并发程序设计的本质 并发程序通常包
2016-11-23 21:31:43 339
原创 linux kernel中断处理
一、什么是下半部中断是一个很霸道的东西,处理器一旦接收到中断,就会打断正在执行的代码,调用中断处理函数。如果在中断处理函数中没有禁止中断,该中断处理函数执行过程中仍有可能被其他中断打断。出于这样的原因,大家都希望中断处理函数执行得越快越好。 另外,中断上下文中不能阻塞,这也限制了中断上下文中能干的事。 基于上面的原因,内核将整个的中断处理流程分为了上半部和下半部。上半部就是之前所说的中断处理函数
2016-11-22 17:38:50 1060
原创 iptables/netfilter
Iptables/Netfilter原理分析Netfilter是Linux操作系统核心层内部的一个数据包处理模块,它具有如下功能: 1) 网络地址转换(Network Address Translate) 2) 数据包内容修改 3) 以及数据包过滤的防火墙功能 Netfilter平台中制定了五个数据包的挂载点(Hook Point,我们可以理解为回调函数点,数据包到达这些位置的时候会主动调用
2016-11-21 20:51:47 639
转载 pin control subsystem(pinctrl)
GPIO相关硬件有哪些差异嵌入式工程师总是要处理各种各样的target board,每个target board上的GPIO总是存在不同,例如: 1、和CPU的连接方式不同 对于ARM的嵌入式硬件平台,SOC本身可以提供大量的IO port,SOC上的GPIO controller是通过SOC的总线(AMBA)连接到CPU的。对于嵌入式系统而言,除了SOC的IO port,一些外设芯片也可能会提
2016-11-21 20:20:14 2315
原创 makefile模板
模板# 下面的变量可以在shell 的环境变量里面指定。# 也可以象下面这样在 Makefile 里面指定。# CC=gcc # 编译器# CFLAGS=-Wall -Werror -g # 编译器参数# LD=gcc
2016-11-21 14:49:53 296
原创 linux网络深入理解笔记一
常用的缩写: 缩写 意义 L2 链路层(如ethernet) L3 网络层(如ip) L4 传输层(如tcp/udp/icmp) BH 下半部(Bottom Half) IRQ 中断(事件) RX 接收 TX 发送圾收集: 内存是有限的共享资源,不应该浪费,特别是在内存中,因为内核不使用虚拟内存。多数内核子系统会实现某种垃圾收集,以回收由未使用的或无效的数据结构实例
2016-11-20 20:21:31 1471
原创 linux驱动开发总结(一)
基础性总结1, linux驱动一般分为3大类: * 字符设备 * 块设备 * 网络设备2, 开发环境构建: * 交叉工具链构建 * NFS和tftp服务器安装3, 驱动开发中设计到的硬件: * 数字电路知识 * ARM硬件知识 * 熟练使用万用表和示波器 * 看懂芯片手册和原理图 4, linux内核源代码目录结构: * arch/: arch子目录包括了所有和体系结构相关的核心
2016-11-20 18:19:56 12069 7
翻译 Documentation/sysfs的中文翻译
Documentation/filesystems/sysfs.txt 的中文翻译如果想评论或更新本文的内容,请直接联系原文档的维护者。如果你使用英文 交流有困难的话,也可以向中文版维护者求助。如果本翻译更新不及时或者翻 译存在问题,请联系中文版维护者。 英文版维护者: Patrick Mochel [email protected] Mike Murphy mamurph@c
2016-11-19 18:38:31 464
转载 【Atheros】minstrel速率调整算法源码走读
先说几个辅助的宏,因为内核不支持浮点运算,当然还有实现需要,minstrel对很多浮点值做了缩放:/* scaled fraction values */#define MINSTREL_SCALE 16#define MINSTREL_FRAC(val, div) (((val) << MINSTREL_SCALE) / div)#define MINSTREL_TRUNC(val)
2016-11-18 23:58:19 1554
转载 linux kernel总结
内核与操作系统内核是操作系统的核心部分,包含了系统运行的核心过程,决定系统的性能,操作系统启动内核被装入到RAM中; 操作系统与底层硬件设备交互和为运行应用程序提供执行环境。Linux内核与微内核比较:微内核:内核只需要一个很小的函数集,通常包括几个同步原语,一个简单的调度程序和进程间通信机制。 运行在微内核之上的几个系统进程实现系统级功能:内存分配,设备驱动程序……完全的模块化进程。任何操作系
2016-11-18 11:39:06 1737
原创 kernel中__init等宏总结
关于__init、__initdata、__exit、__exitdata及类似的宏打开Linux Kernel源代码树中的文件:include/init.h,可以看到有下面的宏定议:#define __init __attribute__ ((__section__ (".init.text"))) __cold#define __initdata __attribute__ (( _
2016-11-17 11:01:38 2527
翻译 Documentation/gpio.txt 的中文翻译
Documentation/gpio.txt 的中文翻译如果想评论或更新本文的内容,请直接联系原文档的维护者。如果你使用英文 交流有困难的话,也可以向中文版维护者求助。如果本翻译更新不及时或者翻 译存在问题,请联系中文版维护者。 英文版维护者: Grant Likely [email protected] Linus Walleij linus.walleij
2016-11-16 22:46:17 1108
原创 rt2860v2源码分析二
在pci_main_dev.c中,最主要的是rt2860_probe()函数,该函数查找网络设备并进程初始化, 而设备的初始化在rt2860_probe函数中的RtmpPhyNetDevInit(pAd, &netDevHook)/*NetDevInit============================================== */ net_dev = RtmpPhyN
2016-11-16 22:20:20 2216
原创 kernel中driver/base/core.c
/* * drivers/base/core.c - core driver model code (device registration, etc) * * Copyright (c) 2002-3 Patrick Mochel * Copyright (c) 2002-3 Open Source Development Labs * Copyright (c) 2006 Greg K
2016-11-16 21:29:00 1058
转载 linux内核链表list及功能函数
linux内核中,有一种通用的双向循环链表,构成了各种队列的基础。链表的结构定义和相关函数均在include/linux/list.h中,下面就来全面的介绍这一链表的各种API。struct list_head { struct list_head *next, *prev; }; 这是链表的元素结构。因为是循环链表,表头和表中节点都是这一结构。有prev和next两个指针,分别指
2016-11-16 17:57:27 788
转载 linux input子系统
了解linux input子系统Linux输入设备总类繁杂,常见的包括有按键、键盘、触摸屏、鼠标、摇杆等等,他们本身就是字符设备,而linux内核将这些设备的共同性抽象出来,简化驱动开发建立了一个input子系统。子系统共分为三层,如图所示 驱动层和硬件相关,直接捕捉和获取硬件设备的数据信息等(包括触摸屏被按下、按下位置、鼠标移动、键盘按下等等),然后将数据信息报告到核心层。核心层负责连接驱动层
2016-11-16 15:29:30 537
转载 Android系统典型bootloader分析
1、bootloader是什么? 简单地说,bootloader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。 Android系统基于Linux,所以bootloader部分也是与传统的嵌入式设备上运行的Linux没有什么区别。由于除Google外
2016-11-15 21:26:04 2138
原创 linux网络设备理解
网络层次linux网络设备驱动与字符设备和块设备有很大的不同。 1. 字符设备和块设备对应/dev下的一个设备文件。而网络设备不存在这样的设备文件。网络设备使用套接字socket访问,虽然也使用read,write系统调用,但这些调用只作用于软件对象。 2. 块设备只响应来自内核的请求,而网络驱动程序异步接收来自外部世界的数据包,并向内核请求发送到内核。linux内核中网络子系统的设计基于设备无
2016-11-15 21:16:39 2435
转载 Linux发送函数dev_queue_xmit
当上层准备好一个包之后,交给下面这个函数处理: int dev_queue_xmit(struct sk_buff *skb) { struct net_device *dev = skb->dev; struct netdev_queue *txq; struct Qdisc *q; int rc = -ENOME
2016-11-15 17:20:12 2098
转载 Linux C进程与多线程
进程和程序的区别进程和程序的区别可以理解为,进程是活动的程序,而程序是一个代码的集合。进程是加载到内存中的程序,而程序没有加载到内存中,之在磁盘上保存着。下图是进程的结构,而程序进包含代码段 +-------------+ | 代码段 | +-------------+ | 堆栈段 | +-------------+ | 数据段 | +-----
2016-11-15 16:42:36 1878
转载 Linux 服务器模型
当我们用socket进行编程的时候,细节上都是选择一个AF_LOCAL,AF_INET再根据相应的类型填充地址,其实根据通信需求,有几种简单的服务模型可供选用,掌握了这些框架再结合socket高度的抽象,可以为我们编写简单的服务器程序提供指导循环服务用户请求服务需要排队,服务器一次只能服务一个客户,服务完才能对下一个客户进行服务。ATM机就是这个1vs1模型。udp服务器也经常使用这个模型//模型伪
2016-11-15 15:07:02 277
原创 boa源码分析
boa应用程序从src/boa.c开始运行,进入关键的select_loop中,boa将处于无阻塞轮询运行服务中。/* boa里边有三个请求链表* request *request_ready = NULL; /* ready list head */* request *request_block = NULL; /* blocked list head */* request *re
2016-11-15 11:23:22 3867 1
原创 linux设备驱动模型-kobject
sysfs文件系统“sysfs is a ram-based filesystem initially based on ramfs. It provides a means to export kernel data structures, their attributes, and the linkages between them to userspace.”Linux2.6内核引入了sysf
2016-11-14 17:01:42 370
原创 container_of分析
在Linux 内核中,container_of 函数使用非常广,例如 Linux内核链表 list_head、工作队列work_struct中。需要注意的是container_of不是一个函数而是一个宏。该宏定义在include/linux/kernel.h中,源码为:/** * container_of - cast a member of a structure out to the cont
2016-11-14 15:31:20 301
Telit_LM940_Hardware_User_Guide_r4
2018-06-12
Amazon Sagemaker端到端的托管机器学习平台
2018-06-06
高通手机RF PCB LAYOUT GUIDELINES
2018-05-30
ARM System Developer’s Guide Designing and Optimizing System Software
2018-05-29
D1_03_Sebastien_Dudek_HomePlugAV_PLC
2018-05-28
80-NB715-1_G_Making_First_Call_on_NikeL
2018-04-24
MTK_Wi-Fi_SoftAP_Software_Programming_Guide_v4.2
2016-12-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人