Linux Kernel
文章平均质量分 80
星空探索
linux
展开
-
linux elf tool readelf
readelf readelf [-a|--all] [-h|--file-header] [-l|--program-headers|--segments] [-S|--section-headers|--sections] [-g|--section-g原创 2011-11-05 15:51:00 · 707 阅读 · 0 评论 -
linux tool objdump
NAMEobjdump - display information from object files. SYNOPSISobjdump [-a|--archive-headers] [-b bfdname|--target=bfdname] [-C|--demangle[=style] ] [-d|--disassem原创 2011-11-05 15:54:21 · 591 阅读 · 0 评论 -
linux tool nm
NAMEnm - list symbols from object files SYNOPSISnm [-a|--debug-syms] [-g|--extern-only] [-B] [-C|--demangle[=style]] [-D|--dynamic] [-S|--print-size] [-s|--print-armap] [-A|-o原创 2011-11-05 16:01:11 · 1164 阅读 · 0 评论 -
Linux下ARM SoC信息描述
在linux kernel中,各个ARM下平台都会实现一个描述平台的对象struct machine_desc,这是一个很重要的数据结构,各个平台都需要实现这样的一个对象,系统初始化过程中,会对这里定义的函数回调,已完成对系统的初始化。我们这里先列出基本数据结构,下面将逐一介绍这些函数调用处理。arch/arm/include/asm/mach/arch.hstruct machi原创 2016-01-05 22:05:43 · 648 阅读 · 0 评论 -
平台对象建立过程
函数setup_machine_fdt()对struct machine_desc对象初始化。函数参数dt_phys给出了设备树的物理地址。const struct machine_desc * __init setup_machine_fdt(unsigned int dt_phys){ const struct machine_desc *mdesc, *mdesc_原创 2016-01-05 22:29:46 · 399 阅读 · 0 评论 -
Linux内核tag分析
const struct machine_desc * __initsetup_machine_tags(phys_addr_t __atags_pointer, unsigned int machine_nr){ struct tag *tags = (struct tag *)&default_tags; const struct machine_desc *mde原创 2016-01-05 22:36:14 · 1037 阅读 · 0 评论 -
启动过程内存check和vmalloc大小设置
在Linux内核启动过程中,内核根据系统配置来设置虚拟地址空间的布局,如PAGE_OFFSET的起始地址,PHYS_OFFSET等。对于宏PHYS_OFFSET来说,其描述的是物理内存的起始地址,一般由硬件给出。如下面一些设置:ARM:arch/arm/include/asm/memory.h#define PLAT_PHYS_OFFSET UL(CONFIG_PHYS_OFFS原创 2016-01-05 22:33:37 · 3583 阅读 · 0 评论 -
Linux TCP/IP socket 实现
简要记录函数调用流程SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol){int retval;struct socket *sock;int flags;/* Check the SOCK_* constants for consistency. */BUILD_BUG_ON(S原创 2016-10-01 22:48:54 · 461 阅读 · 0 评论 -
Linux 内核 net_proto_family
static const struct net_proto_family inet_family_ops = {.family = PF_INET,.create = inet_create,.owner = THIS_MODULE,};(void)sock_register(&inet_family_ops);/** * sock_register -原创 2016-10-01 22:58:10 · 1211 阅读 · 0 评论 -
Linux创建socket
static const struct net_proto_family inet_family_ops = {.family = PF_INET,.create = inet_create,.owner = THIS_MODULE,};/* * Create an inet socket. */static int inet_create(原创 2016-10-01 23:01:05 · 534 阅读 · 0 评论 -
inetsw table
/* The inetsw table contains everything that inet_create needs to * build a new socket. */static struct list_head inetsw[SOCK_MAX];static DEFINE_SPINLOCK(inetsw_lock);for (q = inetsw_arr原创 2016-10-01 23:08:20 · 349 阅读 · 0 评论 -
传输层实现
struct inet_protosw {struct list_head list; /* These two fields form the lookup key. */unsigned shorttype; /* This is the 2nd argument to socket(2). */unsigned shortprotocol;原创 2016-10-01 23:12:01 · 481 阅读 · 0 评论 -
tcp_prot
{.type = SOCK_STREAM,.protocol = IPPROTO_TCP,.prot = &tcp_prot,.ops = &inet_stream_ops,.flags = INET_PROTOSW_PERMANENT | INET_PROTOSW_ICSK,},struct pr原创 2016-10-01 23:13:35 · 580 阅读 · 0 评论 -
udp_prot
{.type = SOCK_DGRAM,.protocol = IPPROTO_UDP,.prot = &udp_prot,.ops = &inet_dgram_ops,.flags = INET_PROTOSW_PERMANENT, },struct proto udp_prot = {原创 2016-10-01 23:15:09 · 473 阅读 · 0 评论 -
ping_prot
{.type = SOCK_DGRAM,.protocol = IPPROTO_ICMP,.prot = &ping_prot,.ops = &inet_dgram_ops,.flags = INET_PROTOSW_REUSE, },struct proto ping_prot = {.nam原创 2016-10-01 23:16:36 · 702 阅读 · 0 评论 -
raw_prot
{ .type = SOCK_RAW, .protocol = IPPROTO_IP,/* wild card */ .prot = &raw_prot, .ops = &inet_sockraw_ops, .flags = INET_PROTOSW_REUSE,原创 2016-10-01 23:18:14 · 292 阅读 · 0 评论 -
Linux内核中的spin_lock理解
Linux kernel spin_lock原创 2017-03-01 11:00:05 · 1081 阅读 · 0 评论 -
struct wb_domain
/* * A wb_domain represents a domain that wb's (bdi_writeback's) belong to * and are measured against each other in. There always is one global * domain, global_wb_domain, that every wb in the原创 2017-02-12 21:28:38 · 422 阅读 · 0 评论 -
Linux & Unix 系统中常用解压和压缩命令
文件解压和压缩.tar.gz 格式解压为 tar -zxvf xx.tar.gz.tar.bz2 格式解压为 tar -jxvf xx.tar.bz2.tar.xz 格式解压为 xz -d xxx.tar.xz;tar xvf xxx.tar# tar -cvf etc.tar /etc <==仅打包,不压缩!# tar -czvf etc.tar.gz /etc <==打包后,以 gzip 压缩# tar -cj原创 2017-03-01 20:45:30 · 828 阅读 · 0 评论 -
Linux kernel 软中断机制之初始化
Linux kernel 软中断机制之初始化原创 2017-03-08 08:02:53 · 376 阅读 · 0 评论 -
Linux kernel 软中断机制之触发软中断执行
在前面介绍中,我们知道如何对软中断的简单初始化,软中断需要触发,然后软中断处理函数才能被执行: 内核提供__raise_softirq_irqoff()类函数对指定的软中设置标志位。与此相关的函数还有: raise_softirq_irqoff()local中断已经关闭,对软中设置标识位,并且在非中断上下文,唤醒软中处理的内核线程softirqd。raise_softirq()原创 2017-03-08 08:03:59 · 3643 阅读 · 0 评论 -
Linux kernel 软中断机制之软中断执行
软中断处理函数在函数__do_softirq()中被调用:asmlinkage void __do_softirq(void){ unsigned long end = jiffies + MAX_SOFTIRQ_TIME; unsigned long old_flags = current->flags; int max_restart = MAX_SOFTIRQ_RES原创 2017-03-08 08:04:47 · 860 阅读 · 0 评论 -
Linux kernel 软中断机制之每cpu软中断处理
尽管软中断处理可以在中断之后进行,内核设计者也实现了软中断在内核线程上下文运行。即softirqdX类。定义每CPU线程:DEFINE_PER_CPU(struct task_struct *, ksoftirqd); static struct smp_hotplug_thread softirq_threads = { .store = &ksoftirqd, .t原创 2017-03-08 08:05:42 · 1830 阅读 · 0 评论 -
Linux kernel 软中断机制之软中断处理时机
local_bh_enable_ip local_bh_enable | | ------------------- irq_exit | | netif_rx_ni _local原创 2017-03-08 08:06:11 · 1963 阅读 · 0 评论 -
Linux kernel 中断之proc接口之interrupts
用于对中断观察的主要有两个文件,一个是proc/irq,另一个是proc/interrupts。需要配置CONFIG_GENERIC_IRQ_SHOW宏在proc目录下实现interrupts文件,用于获取中断发生次数统计:fs/proc/interrupts.cstatic const struct seq_operations int_seq_ops = { .start原创 2017-03-08 08:07:26 · 2135 阅读 · 0 评论 -
Linux内核中断模块之中断描述符分配
对于一个系统来说,管理中断描述符也是一个值得考量的问题,如果中断个数有限,并且分布连续,则使用一个数组较为简单,而如果中断分散,则采用动态分配较为可观,内核在配置CONFIG_SPARSE_IRQ时,采用动态分配中断描述符。在非配置情形下则使用一个固定数组跟踪所有的中断描述符,即中断描述符表,数组形式如下:struct irq_desc irq_desc[NR_IRQS] __cach原创 2017-03-08 08:08:08 · 699 阅读 · 0 评论 -
Linux内核中断模块之中断域操作描述
/** * struct irq_domain_ops - Methods for irq_domain objects */struct irq_domain_ops { int (*match)(struct irq_domain *d, struct device_node *node, enum irq_domain_bus_token bus_token)原创 2017-03-08 08:08:27 · 594 阅读 · 0 评论 -
Linux内核中断模块之中断域描述
/** * struct irq_domain - Hardware interrupt number translation object */struct irq_domain { struct list_head link; const char *name; const struct irq_domain_ops *ops; void *host_data;原创 2017-03-08 08:08:50 · 341 阅读 · 0 评论 -
Linux内核中断模块之中断芯片之附带数据描述
/** * struct irq_data - per irq chip data passed down to chip functions */struct irq_data { u32 mask; unsigned int irq; unsigned long hwirq; struct irq_common_data *common; struct原创 2017-03-08 08:09:11 · 247 阅读 · 0 评论 -
Linux内核中断模块之中断芯片描述
在Linux内核中,每个提供中断分发和逻辑处理判断等能力的芯片用irq_chip描述,定义形式如下:/** * struct irq_chip - hardware interrupt chip descriptor**/struct irq_chip { struct device *parent_device; const char *name; unsigned原创 2017-03-08 08:09:32 · 502 阅读 · 0 评论 -
Linux内核中断模块之中断处理函数描述
对于具体使用中断的模块来说,其中断处理函数被中断封装成一个irqaction对象,此对象的handler就是用户的中断处理函数。struct irqaction { irq_handler_t handler; void *dev_id; void __percpu *percpu_dev_id; struct irqaction *next; irq_hand原创 2017-03-08 08:09:53 · 794 阅读 · 0 评论 -
Linux内核中断模块之中断描述符
Linux 内核中中断描述符,即每个irq对应一个中断描述符。/* * Core internal functions to deal with irq descriptors */struct irq_desc { struct irq_common_data irq_common_data; struct irq_data irq_data; unsigned i原创 2017-03-08 08:10:09 · 429 阅读 · 0 评论 -
Linux 内核等待队列
Linux内核中的等待队列是一种延时机制,其用于当前进程需要等待某些资源而进入一种sleep状态,当等待条件为真时,进程被唤醒,继续执行。显然,这里涉及三个方面,即,一是等待时当前进程处理,二是进程等待时所关注的资源处理,三时进程何时被唤醒继续执行。所以,我们这里需要几个数据结构,主要描述如下:typedef int (*wait_queue_func_t)(wait_queue_原创 2017-03-08 19:12:32 · 402 阅读 · 0 评论 -
Linux 内核工作队列
工作队列也是内核一种延时执行任务机制,显然,内核需要定义一个队列,然后队列上面存放需要执行的任务,而任务执行则有内核线程来调用任务。工作队列定义如下:/* * The externally visible workqueue. It relays the issued work items to * the appropriate worker_pool through its原创 2017-03-08 20:23:19 · 278 阅读 · 0 评论 -
Linux 工作队列之工作者线程创建
前面介绍了工作队列相关数据结构定义,那么对于工作队列上的任务什么时候执行呢?以及相关数据结构是什么呢?工作队列中,执行任务的叫worker,这些worker构成worker_pool。所以有下面定义:/* * The poor guys doing the actual heavy lifting. All on-duty workers are * either servi原创 2017-03-08 20:49:19 · 839 阅读 · 0 评论 -
Linux内核工作队列之任务执行
在前面介绍了工作队列,工作队列上面任务,以及工作队列创建的内核线程,现在讨论线程上面处理的每一个任务,即函数worker_thread()。[] process_one_work[] worker_thread[] kthread之所以任务第一个跑的函数是kthread,是由于函数kthread_create_on_node()创建时,其设置的kthread函数。/**原创 2017-03-08 20:56:06 · 1989 阅读 · 0 评论 -
Linux 内核线程创建
在Linux内核中,创建线程函数为__kthread_create_on_node(),需要注意的是内核创建一个内核线程是个异步过程。函数__kthread_create_on_node对外提供两个函数一,__kthread_create_worker二,kthread_create_on_node当然我们主要使用二这种形式。对于二这种形式,内核简单定义了宏:#define原创 2017-03-08 21:09:50 · 2507 阅读 · 0 评论 -
Linux 内核clk框架描述
clk 描述原创 2017-03-09 08:15:39 · 1276 阅读 · 0 评论 -
Linux 内核clk ops
/** * struct clk_ops - Callback operations for hardware clocks; these are to * be provided by the clock implementation, and will be called by drivers * through the clk_* api. * * @prepare:原创 2017-03-09 09:13:49 · 1075 阅读 · 0 评论 -
Linux 内核clk相关数据结构描述
drivers/clk/clk.cstruct clk { struct clk_core *core; const char *dev_id; const char *con_id; unsigned long min_rate; unsigned long max_rate; struct hlist_node clks_node;};/***priva原创 2017-03-09 08:43:03 · 1287 阅读 · 0 评论