Linux 基础学习
ganggexiongqi
这个作者很懒,什么都没留下…
展开
-
3 进程 的简单学习
参考文献:Advanced.Linux.Programming ,可以从我的上传文件中免费下载。 Linux 编程手册,部分例子是我自己写的。1. 什么是进程? 简单回答,一个程序的运行实例称为一个进程。2. 进程的IDs 在Linux系统中每一个进程有一个唯一的进程ID 标识,或称作 pid。他是一个16-bit的数字。除了init进程外每个进程都有父进程,称为ppid。你可以使用 $ ps -l 来观察当前系统中的进程。 在C 或者C+原创 2010-08-03 08:59:00 · 1009 阅读 · 0 评论 -
4 线程 [1]
<br /> 线程和进程类似,是一种允许一个程序同时做多件事情的机制。Linux内核异步的调度线程,时不时的打断它们来给其它线程执行的机会,<br />这同进程相比线程好像是同时运行的。<br /> 线程存在于进程中。同进程相比线程是更好的执行单元。当你调用一个程序的时候,Linux会创建一个新的进程,在这个进程中创建一个<br />线程,它有序的执行程序。那个线程可以创建新的线程。所有这些线程在同一个进程中执行相同的程序,但是每个线程可能在任何时间执行<br />着这个程序的不同部分。<翻译 2010-08-06 21:31:00 · 734 阅读 · 0 评论 -
4 线程 [2]
<br />4.1.1 向线程传递数据<br /> <br /> 我们可以定义一个结构体里面有向线程传递的参数。使用这种结构体创建变量,并在创建线程时将它的地址作为参数传入。<br />如下是一个例子,<br />Listing 4.2 (thread-create2) Create Two Thread<br />s#include <pthread.h><br />#include <stdio.h><br />/*Parameters to print_function*/<br />t原创 2010-08-07 23:15:00 · 621 阅读 · 0 评论 -
4 线程 [3]
<br />4.1.3 线程返回值<br /> 如果你传递给pthread_join的第二个参数不为NULL,那么线程的返回值将会被放在这个参数指向的位置。线程的返回值为<br />void*类型。在进行数据类型转换时你应当确保没有位丢失。<br />#include <pthread.h><br />#include <stdio.h><br />/*找到第N个素数*/<br />void* compute_prime (void* arg)<br />{<br />原创 2010-08-08 11:58:00 · 734 阅读 · 0 评论 -
4.2 -4.4.2
<br />友情提示:man funtion_name 可以查看 funtion_name的介绍。<br /><br />4.2 线程的取消<br />一个线程A可以通过 pthread_cancel 让另外一个线程B退出。在线程B会返回 PTHREAD_CANCELED。通常,一个线程可以分为以下三类:<br /> 1> 可以被异步取消。在线程运行的任何时候都可以被取消。<br /> 2> 可以被同步取消。线程不是在任何时候都可以被取消。这样,对该线程的取消请求只在线程运行原创 2010-08-14 21:31:00 · 979 阅读 · 0 评论 -
线程 [ 4.4.3- end]
<br /><br /><br /><br />4.4.3 Mutex Deadlocks<br />Mutexes 提供了一种允许一个线程让另一个线程阻塞的机制。但是这也为产生一种新的错误带来了可能---死锁。<br /><br />当一个或则多个线程等待不可能发生的事件时就会产生死锁。<br />当同一个线程对同一个mutex加锁两次时就可能发生死锁。这也跟锁的类型有关。有三种锁,<br /> 1> 当为fast mutex(默认的种类)类型的锁时,将会发生死锁。因为它将会被翻译 2010-08-15 21:13:00 · 1644 阅读 · 0 评论 -
进程间通信 [1]
我们要讨论5种类型的进程间通信方式。1> 共享内存,允许进程通过简单的读写一块指定的内存来通信。2> 内存映射,和共享内存类似。不同的是它和文件系统中的一个文件关联。3> 管道,相关进程间通信。4> FIFO 和管道类似。不同的是它允许不相关的进程间通信,因为这管道在文件系统中被赋予了名字。5> 基于socket的进程间通信。这里的进程可以是在同一台机器上,也可以是不在同一台机器上。原创 2010-08-16 20:42:00 · 888 阅读 · 0 评论 -
5.4 管道
<br />5.4 管道<br />管道是一种允许单向通信的设备。数据写入管道的“写端”,从“读端”读出。管道是串行设备,数据的读出顺序和写入顺序相同。<br />典型的,管道用在一个进程的两个线程之间或者用在父子进程之间。<br /> 在 shell 中, 符号 "|" 创建一个管道。例如,<br /> % ls | less <br /> 这将会产生两个进程。一个 ls 一个 less。shell还会创建一个管道用于连接ls子进程的标准输出和less子进程的标准输入原创 2010-08-23 14:56:00 · 861 阅读 · 0 评论 -
进程间通信 [2]
5.2 进程间信号量进程间信号量的分配,使用和解除分配和共享内存段类似。5.2.1 分配和解除分配SYNOPSIS #include #include #include int semget(key_t key, int nsems, int semflg);描述: semget()会返回与参数key 相关的信号量集的标识符. 如果,key 值为 IPC_PRIVATE, 或者,原创 2010-08-22 19:52:00 · 921 阅读 · 0 评论 -
5.4.5 命名管道(FIFOs)
<br />5.4.5 命名管道(FIFOs)<br />FIFO 文件是一个文件系统中的有名管道。任何一个进程都可以打开或者关闭FIFO,管道两端的进程不必是相关的。<br />你可以使用 mkfifo 命令创建一个命名管道。如下,<br />% mkfifo /tmp/fifo<br />% ls -l /tmp/fifo<br />prw-rw-rw- 1 samuel users 0 Jan 16 14:04 /tmp/fifo<br />第一个 p 指示了该文件是一个命名原创 2010-08-23 15:43:00 · 1104 阅读 · 0 评论 -
C++调用C函数[待修改]
//test.cpp 文件#include #include //对应C中的 stdio.h [C++中调用C的库函数,有对应C++版本如,cstring]#include #include "./cfun_add.h"//调用C写的函数using namespace std;int main (void){ cout原创 2010-09-19 17:54:00 · 671 阅读 · 0 评论 -
高级字符驱动程序操作---增加ioctl功能
// pipe.c/* How to use: * # echo "" > /var/log/messages //clear file * # insmod pipe.ko * # mknod /dev/myp c 250 0 * # make test_ioctl //creat test_ioctl to test the ioctl of our module * # ./test_ioctl * Then you can see * *原创 2010-11-29 22:16:00 · 1117 阅读 · 0 评论 -
高级字符驱动程序操作--增加了poll功能
<br />/* How to use: * # echo "" > /var/log/messages //clear file * # insmod pipe.ko * # mknod /dev/myp c 250 0* # make poll_test * # ./poll_test * You can see * no data * no data * ... * * Then open a new terminal *原创 2010-11-29 22:20:00 · 570 阅读 · 0 评论 -
高级字符驱动程序操作--增加了async功能
<br />/* How to use: * # echo "" > /var/log/messages //clear file * # insmod pipe.ko * # mknod /dev/myp c 250 0* # make async_test * # ./async_test * Open a new terminal * # echo 1 > /dev/myp * return to the first terminal, * you can原创 2010-11-29 22:27:00 · 1260 阅读 · 0 评论 -
内核定时器和/proc文件使用实例
<br /> @dslab <br />/* How to use:<br />* #cat /proc/kernel_timer<br />*/<br />init:<br /> 创建 /proc/kernel_timee入口项<br />clearup:<br /> 删除 init创建的入口项<br />kernel_timer:<br /> 1》分配 k_t_data变量<br /> 2》打印出表头<br /> 3》设置并添原创 2010-11-30 22:38:00 · 1301 阅读 · 0 评论 -
Linux下的网络管理
原文:http://jianlee.ylinux.org/Computer/SystemAdmin/network.html<br />ifconfig命令手动设置网卡示例<br />假设想把网卡设置为如下:网卡:eth0IP:192.168.2.110掩码:255.255.255.0网管:192.168.2.1<br />可以这样:ifconfig eth0 192.168.2.110 netmask 255.255.255.0 uproute add default gw 192转载 2010-10-13 20:20:00 · 918 阅读 · 0 评论 -
request_irq() | 注册中断服务
request_irq() | 注册中断服务在 2.4 内核和 2.6内核中都使用 request_irq() 函数来注册中断服务函数。在 2.4 内核中,需要包含的头文件是 #include <linux/sched.h> ,2.6 内核中需要包含的头文件则是<br />#include <linux/interrupt.h> 。函数原型如下:<br /><br />2.4 内核intrequest_irq (unsignedintirq,void (*handler)(int,voi转载 2010-12-05 22:28:00 · 1634 阅读 · 0 评论 -
Linux下Rtl8139too网卡设备驱动程序关键函数剖析
<br />原文:http://www.xxlinux.com/linux/article/development/soft/20071108/11702.html<br />static int __devinit rtl8139_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)<br />函数功能描述:赋给pci_driver结构体中的probe函数指针,用于当PCI核心检测到一个需要控制的pci_dev时,对相应的设备进行转载 2010-12-19 13:41:00 · 1329 阅读 · 0 评论 -
单播、多播(组播)和广播的区别
单播、多播(组播)和广播的区别<br />原文:http://blog.chinaunix.net/u2/76263/showart_1412959.html<br />单播、多播和广播单播”(Unicast)、“多播”(Multicast)和“广播”(Broadcast)这三个术语都是用来描述网络节点之间通讯方式的术语。那么这些术语究竟是什么意思?区别何在?<br /><br />1.单播:网络节点之间的通信就好像是人们之间的对话一样。如果一个人对另外一个人说话,那么用网络技术的术语来描述就是“单转载 2010-12-16 22:01:00 · 895 阅读 · 0 评论 -
Set a multicast entry into the Ethernet controller (rtl网卡)
原文: http://augustseu-blog.appspot.com/?p=53001在我们使用ifconfig命令查看NI的信息时。有这样一行标志量,如下红色字体显示eth0 Link encap:以太网 硬件地址 00:27:13:69:7e:b7 inet 地址:10.6.15.139 广播:10.6.15.255 掩码:255.255.255.0 inet6 地址: fe80::227:13ff:fe69:7eb7/64Scope:Link转载 2010-12-21 15:59:00 · 1622 阅读 · 0 评论 -
Writing a Network Driver
Writing a Network DriverIn this chapter, we look at the work that you must do to write a driver for your own network interface controller.This chapter includes:The network driver interfaceDriver option definitionsThe driver utility libraryGuidelines转载 2010-12-21 10:13:00 · 2077 阅读 · 0 评论 -
PCI设备内存的访问
原文>>>http://blog.chinaunix.net/u2/67414/showart_1657718.html接着上文给出的源代码,我们可以在rtl8139_init_one中插入一些不同的调试代码,观察设备驱动模块在内核中的一些动作。8139too网卡设备的设备内存的头6个字节存放的是该网卡的48位的MAC地址,我们可以通过访问设备内存得到这个MAC地址。下面通过在rtl8139_init_one在插入代码,以四种不同方式访问设备内存。第一种是通过访问I/O内存实现,后三种则是通过访转载 2010-12-23 16:57:00 · 4844 阅读 · 0 评论 -
Linux下PCI设备驱动程序开发
Linux下PCI设备驱动程序开发肖文鹏 (xiaowp@263.net), 硕士研究生, 北京理工大学计算机系肖文鹏,北京理工大学计算机系的一名硕士研究生,主要从事操作系统和分布式计算环境的研究,喜爱Linux和Python。你可以通过 xiaowp@263.net与他取得联系。简介: PCI是一种广泛采用的总线标准,它提供了许多优于其它总线标准(如EISA)的新特性,目前已经成为计算机系统中应用最为广泛,并且最为通用的总线标准。Linux的内核能较好地支持PCI总线,本文以Intel转载 2010-12-23 17:31:00 · 1390 阅读 · 0 评论 -
Linux 汇编语言开发指南
原文:http://www.ibm.com/developerworks/cn/linux/l-assembly/<br /> Linux 汇编语言开发指南<br /> 肖文鹏 (xiaowp@263.net), 北京理工大学计算机系硕士研究生本文作者 肖文鹏是北京理工大学计算机系的一名硕士研究生,主要从事操作系统和分布式计算环境的研究,喜爱Linux和Python。你可以通过 xiaowp@263.net与他取得联系。 <br />简介:转载 2010-11-02 23:31:00 · 704 阅读 · 0 评论 -
实模式和保护模式
一。x86实模式介绍 x86体系的处理器刚开始时只有20根地址线,寻址寄存器是16位。我们知道16位的寄存器可以访问64K的地址空间,如果程序要想访问大于64K的内存,就需要把内存分段,每段64K,用段地址+偏移量的方式来访问,这样使20根地址线全用上,最大的寻址空间就可以到1M字节,这在当时已经是非常大的内存空间了。 二。实模式的问题与保护模式的出现 事实上,实模式将整个物理内存看成分段的区域,程序代码和数据位于不同区域,系统程序和用户程序并没有区别对待,而且每一个指针都转载 2010-11-23 09:48:00 · 774 阅读 · 0 评论 -
kernel thread, wait queue, /proc/sys/kernel entry, call usermode handler in kernel mode
author: Joseph(Honggang Yang)@dslabdate: 05-10-2011Key words: kernel thread, wait queue, /proc/sys/kernel entry, call usermode handler in kernel mode====================================================In this section I sill show you how to create two kerne原创 2011-05-10 22:45:00 · 1712 阅读 · 0 评论 -
/proc/sys/kernel/ 入口项的创建
<br />/proc/sys/kernel/* entry creationYou have to modify the Linux source code. Here we use 2.6.23.1. Add an entry to the kern_table array in kernel/sysctl.c as following ... { .ctl_name = KERN_MYEVENT_HANDLER,//Define in原创 2011-05-10 21:30:00 · 2158 阅读 · 0 评论 -
link list and wait queue
<br />- test2.c (/usr/src/linux-2.6.23/joseph)<br />|- struct <br />|| _mydrv_wq <br />|| _mydrv_work <br />| <br />|- variable <br />|| mydr原创 2011-05-13 11:22:00 · 1004 阅读 · 0 评论 -
工作队列 例子
<br />接着 上一篇 “工作队列 的变化”<br />写了个例子,代码如下:<br /> <br />#include <linux/workqueue.h>#include <linux/module.h> // kmalloc ... #include <linux/sysctl.h>int submit_work(void (*func)(struct work_struct *work), void* data);struct workqueue_struct* wq = NU原创 2011-05-19 17:10:00 · 1122 阅读 · 0 评论 -
Notifier Chains
<br /> <br />Essential linux device driver:<br /> <br />Notifier chains are used to send status change messges to code regions that request them.<br />There are Die notification, Net device notification, CPU frequency notification, and Internet address no原创 2011-05-19 21:31:00 · 1450 阅读 · 0 评论 -
synchronizing using completion function
<br />essential linux device dirver:<br /> <br />In the following example, 'my_release' is called when module is removed.<br />But before the module's unloaded, you have to make sure that 'my_thread' <br />has finished some very important task which will原创 2011-05-20 11:13:00 · 718 阅读 · 0 评论 -
kthread helpers --- a good choice to replace complex completion interfaces
<br />/*The kthread interface provides you free access to a built-in exit synchronization mechanism implemented using the completion interface.You may directly call kthread_stop() to ask the corresponding task to exit. And make a neat call to kthr原创 2011-05-21 10:51:00 · 956 阅读 · 0 评论 -
一个简单的并口驱动
// parport.c/*Function: It implement parport read and write method.-------------------------------------------------------- How to use: * # echo "" > /var/log/messages //clear file * # insmod pipe.ko * # cat /var/log/messages you can原创 2011-05-25 10:47:00 · 1679 阅读 · 0 评论 -
softirq 使用
在上一篇 “一个简单的并口驱动”的基础上,我增加了softirq的使用。具体描述:Softirq:1. Add an entry in file 'include/linux/interrupt.h'.enum{ HI_SOFTIRQ=0, TIMER_SOFTIRQ, NET_TX_SOFTIRQ, NET_RX_SOFTIRQ, BLOCK_SOFTIRQ, TASKLET_SOFTIRQ, SCHED_SO原创 2011-05-27 23:23:00 · 1090 阅读 · 0 评论 -
开源Liecense介绍
<br />开源在今天的软件业已经很普遍,但开源是否意味着使用者可以对开源后的代码为所欲为呢?答案是否定的。开源运动同样有自己的游戏规则和道德准则。不遵行这些规则不但损害开源运动的健康发展,也会对违规者造成名誉和市场上的损失,更可能陷入法律纠纷和赔偿。<br />现今存在的开源协议很多,而经过Open Source Initiative组织通过批准的开源协议目前有58种。我们在常见的开源协议如BSD, GPL, LGPL,MIT等都是OSI批准的协议。如果要开源自己的代码,最好也是选择这些被批准的开源协议。转载 2011-05-28 11:03:00 · 801 阅读 · 0 评论 -
poll 的实现
选自 ELDDSensing Data AvailabilityPoll ://synchronous, it may block the caller.unsigned int (*poll) (struct file *, struct poll_table_struct *);The following is the common module of its im转载 2011-06-14 10:49:00 · 822 阅读 · 0 评论 -
kobject and parport 的一个例子
这一个简单的驱动演示了如何使用parport来建立你自己的并口驱动。 /* Demenstration of how to build your parport related driver upon parport moudle.Author: Joseph Yang @ dslabMail: ganggexiongqi@gmail.comDate: 06-原创 2011-06-30 23:12:00 · 1101 阅读 · 0 评论 -
How to build parport related driver upon parport module in the kernel
The following is from Documentation/parport-lowlevel.txt.At last, a example is given.The example is modified by me.It s from ELDD book, but can not work properly before my modification.The `parport原创 2011-07-02 11:35:10 · 930 阅读 · 0 评论 -
一致代码段和非一致代码段
一致代码段和非一致代码段在存储段描述符中,属性区域的TYPE由位0-3组成。位3称为E位,E=1,表示此描述符用于描述代码段。位2称为C位,位C=1,表示对应的代码段是一致代码段;位C=0,表示对应的代码段不是一致代码段.所谓的“一致代码段”,目的是为了共享,比如该一致代码段的特转载 2011-07-23 10:36:39 · 693 阅读 · 0 评论 -
seg cs 的使用
原文:http://blogold.chinaunix.net/u2/73521/showart_1859515.html最近,在阅读bootsetup.s代码时,发现了seg cs的使用,有点困惑,在网站上看到了一位高人的解答,就将其复制下来了。先讲一下寄存器的默认组合问题,比转载 2011-07-18 17:23:16 · 1329 阅读 · 1 评论