自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

转载 vlan处理

struct sk_buff *vlan_untag(struct sk_buff *skb){ struct vlan_hdr *vhdr; u16 vlan_tci; // 检查VLAN_TAG_PRESENT标志 // 如果已经设置,说明VLAN已被处理 // 本函数最后也会设置此标志 if (unlikely(vlan_t...

2019-06-27 10:40:30 713

转载 NAT

NAT,NetworkAddressTranslation,网络地址转换,是路由器将内网地址转换为公网地址的一种技术。NAT可以使多台计算机共享Internet连接,这一功能很好地解决了公共IP地址紧缺的问题。通过这种方法,您可以只申请一个合法IP地址,就可把整个局域网中的计算机接入Internet中。这时,NAT屏蔽了内部网络,所有内网计算机对于公共网络来说是不可见的,而内网计算机用...

2019-06-27 10:29:14 922

转载 /etc/inittab

Linux完成内核(Kernel)引导后,会开始运行init程序。init程序的进程号始终为1,是所有系统进程的起点。init程序需要读取配置文件/etc/inittab。/etc/inittab是一个不可执行的文本文件,它由若干行指令组成,描述在系统引导及其他操作期间, 都启动哪些进程。在inittab文件中,以#开头的所有行都是注释行。/etc/inittab文件格式:l...

2016-06-21 16:01:28 366

转载 linux系统启动流程

内核空间启动主要流程:1、init/main.c start_kernel()2、init/main.c rest_init()3、init/main.c kernel_init()4、init/main.c init_post()内核至用户空间启动主要流程:1、如果bootloader设置了启动参数,则将"rdinit = "参数赋予ramdisk_execute_...

2016-06-21 14:39:20 477

原创 vfprintf

vprintf是一个函数,功能是送格式化输出到stdout中。printf的功能就是用它来实现的,所不同的是,它用一个参数取代了变长参数表,且此参数是通过调用va_start宏进行初始化。同样,vfprintf和vsprintf函数分别与fprintf和sprintf函数类似。用 法:       int vprintf(char *format, va_list param);示例:

2016-06-13 16:44:37 963

原创 va_list

va_list 是C语言中解决变参问题的一组宏,这些宏定义在 stdarg.h 文件中,所以用到可变参数的程序应该包含这个头文件。va,variable argument,可变参数。写可变参数的C函数要在程序中用到以下这些宏: void va_start( va_listarg_ptr, prev_param ); type va_arg( va_listarg

2016-06-13 16:24:45 292

转载 NAT 简介

NAT,NetworkAddressTranslation,网络地址转换,是路由器将内网地址转换为公网地址的一种技术。NAT可以使多台计算机共享Internet连接,这一功能很好地解决了公共IP地址紧缺的问题。通过这种方法,您可以只申请一个合法IP地址,就可把整个局域网中的计算机接入Internet中。NAT屏蔽了内部网络,所有内网计算机对于公共网络来说是不可见的,而内网计算机用户...

2016-06-02 10:19:08 1031

原创 DHCP

DHCP报文格式DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是IETF为实现IP的自动配置而设计的协议,它可以为客户机自动分配IP地址、子网掩码、缺省网关、DNS服务器等TCP/IP参数。DHCP的前身是 BOOTP,工作在OSI的应用层,承载于UDP协议报文,使用客户端/服务器模式,采用67(DHCP Server)和68(DPCP

2016-05-20 16:24:35 707

原创 PPPoE简介

一、简介PPPoE使用Client/Server模型。PPPoE Client向PPPoE Server发起连接请求,在会话协商通过后,PPPoE Server向PPPoE Client提供接入控制、认证等功能。 二、报文格式PPPoE的报文格式就是在以太网帧中携带PPP报文。 各字段解释如下:# Destination_address:目的设备的以太网MAC地址。

2016-05-11 09:32:11 4079

原创 linux 进线程间通信

信号:由一个进程发送给另一个进程,可作为进程间传递消息或修改行为的一种方式。信号集:多个信号组成的集合。信号量(线程信号量):用于线程间同步与互斥。(与进程信号量不同)互斥锁:用于线程间同步与互斥。信号量(进程信号量,也可叫做信号量集):用于进程间同步与互斥。(与线程信号量不同)消息队列:共享内存:管道:套接字:

2015-11-24 19:33:34 337

原创 linux socket

#include #include int socket(int domain, int type, int protocol);域(domain),又称协议族(protocal family),指定套接字通信中使用的网络介质类型。如AF_UNIX(UNIX文件系统套接字)、AF_INET(UNIX网络套接字)、AF_INET6(用于IPv6)、AF_ISO(ISO标准协议)等。最常用

2015-11-24 19:09:21 297

原创 linux select 系统调用

select 系统调用允许程序同时在多个底层文件描述符上等待输入的到达(或输出的完成,或产生错误信息)。这意味着终端仿真程序可以一直阻塞到有事情可做为止。类似地,服务器也可以通过同时在多个打开的套接字上等待请求到来的方法来处理多个客户。    select 函数对数据结构 fd_set 进行操作,它是由打开的文件描述符构成的集合。有一组定义好的宏可以用来控制这些集合:

2015-11-24 17:49:47 797

转载 bootstrap

image_info 结构体:struct image_info{ unsigned int offset; unsigned int length; char *filename; unsigned char *dest;};dest : 目的地址,加载到内存中的地址,必选;offset + length : 从flash启动时使用,和filename二选

2015-08-23 22:06:28 281

转载 linux延时函数

在linux下,延时可以采用如下函数:1.unsigned int sleep(unsigned int seconds);    sleep()会使当前程序休眠seconds秒。如果sleep()没有睡饱,它将会返回还需要补眠的时间,否则一般返回零。  2.void usleep(unsigned long usec);    usleep与s

2015-08-23 22:03:19 348

转载 linux修改环境变量

方法一:/etc/profile:        对所有用户生效,永久有效;此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行;并从/etc/profile.d目录的配置文件中搜集shell的设置。        例如:        编辑/etc/profile文件,        # vi /etc/profile        添加一行:export

2015-08-23 22:02:22 285

转载 linux内核编译

一:清除内核中间件、配置文件:    make clean    make mrproper    make distclean二:选择参考配置文件    cp *** ./.config三:在参考文件的基础上配置内核    make menuconfig (x86)    make menuconfig ARCH=arm CROSS_COMPI

2015-08-23 22:00:57 317

转载 linux驱动程序 硬件访问

尽管摆弄scull以及其他的一些玩具程序对理解linux设备驱动程序的软件接口很有帮助,但是实现真正的设备仍要涉及实际的硬件。设备驱动程序是软件概念和硬件电路之间的一个抽象层。好,下面我们介绍驱动程序在linux平台上如何在保持可移植性的前提下访问io端口和io内存。为此,我们的谈谈什么是io端口和io内存。每种外设都是通过读写寄存器进行控制。大部分外设都有几个寄存器,不管是在内存

2015-08-23 21:59:46 711

转载 字符设备驱动

//头文件包含#include //变量定义#define GPGCONADDR 0x56000060//硬件中断号定义#define KEY1_IRQ IRQ_EINT5#define KEY2_IRQ IRQ_EINT3//设备名定义#define DEVNAME "mykey"//主设备号、cdev定义 -需全局使用int

2015-08-23 21:58:58 258

转载 杂项设备驱动

//头文件包含#include #define DEVICE_NAME "mydev"#define GPGCONADDR 0x56000060volatile unsigned int *GPFCON;//file_operations 方法编写static int xxx_ioctl( struct inode *inode, struct fi

2015-08-23 21:58:18 347

转载 大小端模式

大端模式,是指数据的高位,保存在内存的低地址中,而数据的低位,保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;小端模式,是指数据的高位保存在内存的高地址中,而数 据的低位保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。下面这

2015-08-23 21:57:28 272

转载 __main() 和 main()

因为我们通常在BOOTLOADER中都已做好了比较细致的初始化工作,包括代码的搬运,所以我们最好别再调用库函数__main(),因为__main()作为ADS集成好的库函数,会对系统进行初始化设置,可能会与我们的初始化发生冲突,故在我们做好初始化后最好别调用__main()。仿真时若调了__main()且没设置entry会报警告,__main()库函数代码不太了解,估计跟ADS初始化有关,库函数_

2015-08-23 21:56:31 360

转载 printk

printk是内核态信息打印函数,功能和标准C库的printf类似。printk还有信息打印级别。 函数原型:int printk(const char *fmt, ...) 需要的头文件: #include消息打印级别:fmt----消息级别:#defineKERN_EMERG    ""#defineKERN_ALERT    ""#

2015-08-23 21:55:46 381

转载 处理器内核

#处理器内核 -> cache -> 写缓冲器 -> 主存 -> 辅助存储器#写操作,对内核而言非迫切,所以加一个写缓冲器很好。#cache可放在处理器内核与MMU之间(逻辑 cache,主流),也可放在MMU与主存之间(物理 cache)。#对存储器中相同或相邻数据和代码的反复使用,是cache改善性能的主要原因。#cache同时使用了时间和空间的局部性原理。#cac

2015-08-23 21:54:55 444

转载 Makefile自动变量

所谓自动化变量,就是这种变量会把模式中所定义的一系列文件自动挨个取出,直至所有符合模式的文件都取完。自动化变量只应出现在规则的命令中。下面是所有的自动化变量及其说明: $@表示规则中的目标文件。如果目标中有函数库文件,则代表目标中的函数库文件。$%当目标中有函数库文件时使用,表示目标中的非函数库成员。例如,如果一个目标是"foo.a(bar.o)",那么,"

2015-08-23 21:54:08 443

转载 linux驱动概述

内核主要包括以下功能:进程管理、内存管理、文件系统、设备控制、网络功能。进程管理:创建和销毁进程,处理进程的输入输出,实现不同进程之间的通信,进程调度Linux将设备分成三种基本类型:字符设备、块设备、网络设备内核运行时不依赖C库,也不能依赖C库,因此不能使用printf等printk不支持浮点数,内核代码也不能实现浮点数运算。编译内核模

2015-08-23 21:53:13 308

转载 块设备驱动

块设备与字符设备I/O操作的不同如下:1、块设备只能以块为单位接受输入和返回输出,而字符设备则以字节为单位。2、块设备对于I/O请求有对应的缓冲区,因此可以选择以什么顺序进行响应;字符设备无须缓冲且被直接读写。3、块设备可以随机访问,字符设备只能顺序读写。Linux 块设备驱动结构块设备操作集合struct block_device_operatio

2015-08-23 21:52:29 247

转载 flash设备驱动

MTD  :内存技术设备Flash 设备驱动层次:设备节点 ==》MTD设备层,包括MTD字符设备和MTD块设备==》MTD原始设备层==》Flash硬件驱动层描述MTD原始设备的数据结构是mtd_info 。每一个分区被认为是一个mtd_info, 例如,如果有两个mtd原始设备,而每个上有3个分区,在系统中将有6个mtd_info结构体,这些mtd_info的指针被存放

2015-08-23 21:51:24 438

转载 struct file和struct inode

struct file:代表一个打开的文件描述符,系统中每一个打开的文件在内核中都有一个关联的struct file。它由内核在open时创建,并传递给在文件上操作的任何函数,直到最后关闭。当文件的所有实例都关闭之后,内核释放这个数据结构。struct inode:用来记录文件的物理信息。它和代表打开的file结构是不同的。一个文件可以对应多个file结构,但只有一个inode结构

2015-08-23 21:50:35 489

转载 应用程序和VFS之间的接口是系统调用

应用程序和VFS之间的接口是系统调用,而VFS与磁盘文件系统以及普通设备之间的接口是file_operatioons结构体成员函数,这个结构体包含对文件进行打开、关闭、读写、控制等一系列成员函数。由于字符设备的上层没有磁盘文件系统,所以字符设备的file_operations成员函数就直接由设备驱动提供了,因此file_operaion也是字符设备驱动的核心。而对于块设备而言,ext2、fat、j

2015-08-23 21:48:43 1268

转载 linux内核中的IS_ERR()、PTR_ERR()、ERR_PTR()

linux内核中的IS_ERR()、PTR_ERR()、ERR_PTR()IS_ERR宏定义在include/linux/err.h,如下所示:#define MAX_ERRNO 4095//判断x是不是在(0xfffff000,0xffffffff)之间,注意这里用unlikely()的用意#define IS_ERR_VALUE(x) unlik

2015-08-23 21:47:04 11383 3

原创 Linux并发控制方式

1、屏蔽中断 应用范围:单CPU原理:屏蔽中断后,中断无法处理,不存在竞态;屏蔽中断后,进程无法调度,只能执行本进程,因此也不存在竟态。使用方法:local_irq_disable()    //屏蔽中断local_irq_enable()    //开中断2、原子操作自旋锁的基础3、自旋锁原理是原子操作,获不得自旋锁的进程将会原地打转spi

2015-08-23 21:45:17 350

转载 kobject_map

/* * linux/drivers/base/map.c * * (C) Copyright Al Viro 2002,2003 * Released under GPL v2. * * NOTE: data structure needs to be changed. It works, but for large dev_t * it will be too slow. It is isol

2014-08-28 16:37:06 466

转载 IS_ERR()

linux内核中的IS_ERR()、PTR_ERR()、ERR_PTR()IS_ERR宏定义在include/linux/err.h,如下所示:#define MAX_ERRNO 4095  #define IS_ERR_VALUE(x) unlikely((x) >= (unsigned long)-MAX_ERRNO)  static inline vo

2014-08-28 14:41:45 735

转载 EEPROM

1、AT24XX 系列 EEPROM:    AT24CXX系列是

2014-08-14 17:23:47 3775

转载 存储器

一、ROM / RAM 存储器ROM和RAM指的都是半导体存储器,ROM是Read Only Memory的缩写,RAM是Random Access Memory的缩写。ROM在系统停止供电的时候仍然可以保持数据,而RAM通常都是在掉电之后就丢失数据,典型的RAM就是计算机的内存。

2014-08-14 16:25:59 517

转载 typedef int(init_fnc_t) (void);这句话是什么意思啊?

typedef int(*init_fnc_t) (void);init_fnc_t pinit_fnc_t;typedef int(init_fnc_t) (void);init_fnc_t *pinit_fnc_t;两者一样

2014-08-06 17:50:47 872

转载 程序跳转

From http://student.csdn.net/space.php?uid=115191&do=blog&id=11079;都知道U-BOOT分为两个阶段,第一阶段是(~/cpu/arm920t/start.S中)在FLASH上运行(一般情况下),完成对硬件的初始化,包括看门狗,中断缓存等,并且负责把代码搬移到SDRAM中(在搬移的时候检查自身代码是否在SDRAM中),然后完成C程序

2014-08-06 17:35:53 405

转载 汇编中bss,data,text,rodata,heap,stack

bss段:BSS段(bsssegment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文BlockStarted by Symbol的简称。BSS段属于静态内存分配。data段:数据段(datasegment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。text段:代码段(codesegment/

2014-08-06 17:31:25 359

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除