手机版
你好,游客 登录 注册 搜索
rss订阅 手机访问 
Linux编程
Linux内核算法知识点滴
Linux内核算法知识点滴,I/O消耗型和处理器消耗型进程(保证及时的IO响应和高效的CPU利用率)负载平衡:每颗CPU上有一个进程队列,当CPU的负载差大于25%时运行负载平衡程序。(从最忙的CPU上取下一个优先级最高且CPU亲和力最小的进程到负载最轻的CPU进程队列中)。
日期:08/13/2007 08:49:47 作者:Linuxidc
Linux中库认识
  soname
  形式一般为lib.so.,以symbol link的方式存在于文件系统中,version的不同反映了接口的改变,其指向的实际文件的名字通常是在soname后加上..。

  ldd/ldconfig
  一个程序/shared库一般都要依赖其他的一些库,这可以用ldd来查看,它列出了依赖的库的soname,因为实际依赖是库的接口,而soname正是反映了库的接口信息。linux使用ELF作为可执行程序和库的格式,这些依赖的库的soname保存在ELF的某个fileld里。当一个可执行程序执行时,ld.so负责把它所依赖的shared库加载到内存并链接,它按照以下顺序寻找shared库:
日期:08/12/2007 08:16:21 作者:Linuxidc
Ubuntu下练习C
Ubuntu下练习C,Ubuntu版的linux下是没有直接的编译工具的。C,java,c++等都需要自己下载包。虽说像gcc这个命令从头就有,但是真正可以编译还是要 编译工具下下阿安装了才行。

  如何编译C
  1.写源码,另存为想x.c

  2.打开终端,切到文件的目录
日期:08/12/2007 07:13:19 作者:Linuxidc
Linux调试BUG实例分析
Linux调试BUG实例分析,  最近在开发LINUX下的工具,调试一个BUG时遇到很郁闷的情况:

  某处有个segmentation fault。懒得用gdb,于是随便加了几条调试信息,编译,运行之。直接显示错误信息。

  唔......BUG在最近一条信息之前,再细分,再加调试信息,编译,运行,嗯,还得再分。

  3次之后偶郁闷鸟,真正的郁闷鸟......两条消息,一条能正常显示,紧接着的,中间没有任何语句--也不是多线程--的第二条信息就是显示不出来!我靠!我招惹谁了啊?没有任何干扰啊
日期:08/11/2007 06:47:49 作者:Linuxidc
Linux信号处理机制
  信号本质
  信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。

  信号是进程间通信机制中唯一的异步通信机制,可以看作是异步通知,通知接收信号的进程有哪些事情发生了。信号机制经过POSIX实时扩展后,功能更加强大,除了基本通知功能外,还可以传递附加信息。
日期:08/10/2007 06:30:09 作者:Linuxidc
peak-linux-driver-6.4 install
1. wget http://xxxx//peak-linux-driver-6.4.tar.gz
2. tar xvzf peak-linux-driver-6.4.tar.gz
3. uname -r 得到现在的linux版本号
4. 从新编译相应版本的内核,原来发现的问题可能是版本不一致或者于其他的module冲突!
5. cd peak-linux-driver-6.4
日期:08/09/2007 06:37:40 作者:Linuxidc
Linux下进行c开发需装的软件
Linux下进行c开发需装的软件,1、安装
除了gcc外,还要安装什么软件?
gcc -o test test.c
编译不了程序!
日期:08/09/2007 06:37:14 作者:Linuxidc
aix c/c++ 编译器
  一般情况下,我们习惯直接使用cc编译程序,实际上AIX的C/C++编译器还提供了其他的一些使用方法,如后缀为_r就有xlc_r、xlC_r,这里我们做一个完整的介绍。

  AIX平台上缺省的C++编译器为xlC,而C的编译器有三个:

  cc: 这是最习惯用的,扩展模式的C编译器

  xlc: ANSI C编译器,使用UNIX的头文件

  c89: ANSI C编译器,使用ANSI头文件
日期:08/09/2007 06:36:27 作者:Linuxidc
教你解读Linux内核源码的入门方法
教你解读Linux内核源码的入门方法,putpmsg 在内的好几个系统调用都是不进行任何操作的,即有待扩充的空调用;

但它们却仍然占用着sys_call_table表项,估计这是设计者们为了方便扩充系统调用而安排的;

所以只需增加相应服务例程(如增加服务例程getmsg或putpmsg),就可以达到增加系统调用的作用。
日期:08/07/2007 07:21:46 作者:Linuxidc
用Python来kill掉Linux进程
用Python来kill掉Linux进程,Linux下面按进程的命令名字kill掉进程稍稍有点麻烦,就用python写了一个简单的小工具,不过目前这个工具还有点小问题,就是随便输入一个名字,执行ps aux|grep %name 命令,本身也产生一个进程,但是这个进程随即消失,以后kill的时候就找不到这个进程了。不过运行结果还是满意的。
日期:08/06/2007 06:25:11 作者:Linuxidc
浅谈Linux 下的中文程序开发
浅谈Linux 下的中文程序开发,现在越来越多的华人开始用 Linux 了.也越来越多的华人开始写我门自己的 Linux 下面的应用程序了. 开发我门自己的程序,中文当然是一个必不可少的东西了. 这里就来说说 Linux 下面的中文程序的开发. 小弟才疏学浅,只是因为看到网络上面这方面的文章不是很多很全面.所以动手写了这些东西.如果有错误,还望大家多多包含,多多指正.

QT
QT 现在被越来越多的人所喜爱.也有了越来越多的人选择 QT 作为开发Xwindow 下面 GUI 环境的语言. 在 Linux 中,绚丽的 KDE 桌面环境就是用 QT 开发出来的. 现在来看看如何在 QT 下面处理中文.
日期:08/05/2007 06:23:57 作者:Linuxidc
升级GCC到4.0.2-8的步骤命令
升级GCC到4.0.2-8的步骤命令,传到系统根目录下,然后执行tar解压缩命令。然后执行如下命令:
日期:08/04/2007 07:10:43 作者:Linuxidc
通过Linux的内核观察/proc/pid/statm
输出解释

CPU 以及CPU0。的每行的每个参数意思(以第一行为例)为:

参数 解释 /proc//status

Size (total pages) 任务虚拟地址空间的大小 VmSize/4

Resident(pages) 应用程序正在使用的物理内存的大小 VmRSS/4

Shared(pages) 共享页数 0
日期:08/04/2007 07:10:10 作者:Linuxidc
嵌入式应用Linux裁减的初次尝试
前段时间因为嵌入式应用开发的需要,对Linux进行了一次大幅度的裁减。由于是初次接触Linux启动的核心部分,所以基本上还是对网上各种裁减方案的拼凑和整理,包含自己理解的部分实在很少。总的来说效果不算理想,后面还有很长的路要走。这里就大致说说目前这个Linux裁减方案的“雏形”吧。对Linux内核部分的裁减主要根据实际需求进行了重编译,去掉了大部分用不上的特性,以及实际硬件环境之外的设备驱动。这一过程没啥技术含量,就不细说了。
日期:08/03/2007 06:42:15 作者:Linuxidc
系统学习嵌入式Linux 几点非常实用的建议
系统学习嵌入式Linux 几点非常实用的建议,学习掌握嵌入 Linux 的开发与移植现在非常流行。各种学习文章与培训班,充斥书店街头。笔者也上了路,经历漫长的摸索,终于一日开窍,但的确糟蹋了很多金钱与时间。 作为穷人,现写下自己的感受,供好学寒士参考。
日期:08/02/2007 07:12:33 作者:Linuxidc
读linux2.6驱动的一点收获
读linux2.6驱动的一点收获,从2.6版本开始引入了platform这个概念,在开发底层驱动程序时,首先要确认的就是设备的资源信息,例如设备的地址,在2.6内核中将每个设备的资源用结构platform_device来描述,该结构体定义在kernel\include\linux\platform_device.h中。
日期:08/02/2007 07:11:47 作者:Linuxidc
初始Linux Iptables
Linux 的内置firewall机制,是通过kernel中的netfilter模块实现的。Linux kernel使用netfilter对进出的数据包进行过滤,netfilter由三个规则表组成,每个表又有许多内建的链组成。通过使用iptables命令可以对这些表链进行操作,如添加、删除和列出规则等。
日期:08/01/2007 07:06:30 作者:Linuxidc
将UDA1345移植到2.6的内核上
将UDA1345移植到2.6的内核上,平台:REDHAT9.0 + S3C2440 + UDA1345
编译环境:GCC-3.4.1

2.4的Kernel与2.6的Kernel于音频的部分作了很大的改变,2.4的相对好理解点;
将MP1和MP5分别接HIGH,LOW选择L3 MODE;

由于2.6的kernel只支持UDA1341,而1341与1345主要是多了MP1和MP5;
UDA1345的寄存器也有一些变化:
1.取消的STAT1和RST的设置,只保留了STAT0;
2.data也由原来的6个减少为4个;
日期:08/01/2007 07:05:13 作者:Linuxidc
Linux下FrameBuffer直接写屏
因为Linux是工作在保护模式下,所以用户态进程是无法象DOS那样使用显卡BIOS里提供的中断调用来实现狴接写屏,故Linux抽象出FrameBuffer这个设备来供用户态进程实现直接写屏。

在继续下面的之前,先说明几个背景知识:

FrameBuffer主要是根据VESA标准的实现的,所以只能实现最简单的功能。
日期:07/31/2007 06:15:21 作者:Linuxidc
Debian etch的apache2之perl cgi编程环境搭建
使用apt装上apache2后,编辑/etc/apache2/sites-enabled/000-default DocumentRoot,ScriptAlias /cgi-bin/,ErrorLog等统统放在/home/www下面,然后将www目录的owner设置为你的普通用户,下面的目录一定要简历起来,否则无法启动apache2。
日期:07/31/2007 06:14:18 作者:Linuxidc
RHEL4.0最小化安装后安装gcc
RHEL4.0最小化安装后安装gcc,RHEL4.0最小化安装后没有安装gcc!
安装步骤如下!
先找到如下安装包并依次安装OK!
日期:07/30/2007 06:51:09 作者:Linuxidc
Linux Shell变量使用
一、本地变量的使用
本地变量就如同局部变量一样,只在本SHELL中起作用。它不会影响到其他SHELL中的变量。
1。显示变量值
可以使用echo命令。需要注意的是,使用变量的时候必须在变量名前加上$符号
2。清除变量
使用unset命令可以清除命令。
3。显示所有本地SHELL变量
SHELL中预定义了一些环境变量。要想显示这些命令,可以使用set命令。
另外,用户自己已经定义过的本地变量也会在其中显示。
日期:07/29/2007 06:12:41 作者:Linuxidc
一个小设置:改变 eshell 的提示符
一个小设置:改变 eshell 的提示符,下面的小配置让 eshell 的 prompt 最多只显示最后 4 个文件夹名。
日期:07/29/2007 06:09:26 作者:Linuxidc
Linux中使用Shell脚本去掉源码注释的方法
Linux中使用Shell脚本去掉源码注释的方法,该文件用来终极删除注释,操作系统限linux
日期:07/28/2007 05:52:45 作者:Linuxidc
Ubuntu7.04 编译内核2.6.22.1
今天下载了linux kernel 2.6.22.1,之所以对它产生兴趣,是因为这个新内核纠正了一个很大的bug:以往sata硬盘在关机时有类似于突然断电时的异响,尤其是在笔记本 中,声音格外明晰那。在新内核中这个bug得到了修正,正好也借此次机会尝试下ubungu方式编译内核,也算是debian方式。已经有了一次编译内核 的经验,这次顺利的多,一次成功,过程如下:
日期:07/27/2007 07:33:39 作者:Linuxidc
Linux文件系统设计和Java系统JDBC数据库接口设计
为什么会把这两个看起来没有关系的问题拿到一起呢? 因为,我认为两个系统的设计者在设计系统的时候面临着同样的问题。
对于Linux操作系统设计者而言,他/她面临怎样使Linux支持所有存在的文件系统(ext2, ext3, FAT32, msdos等)的问题。它希望做到:从操作系统内部看,它希望看到的所有文件系统都是一样(即:它不关心连接的什么文件系统或者叫做跨文件系统)。
日期:07/26/2007 07:50:54 作者:Linuxidc
Linux kernel 的使用问题
网络服务器由于要同时为多个客户提供服务,就必须使用某种方式来支持这种多任务的服务方式。一般情况下可以有三种方式来选择,多进程方式、多线程方式及异步方式。其中,多进程方式中服务器对一个客户要使用一个进程来提供服务,由于在操作系统中,生成一个进程需要进程内存复制等额外的开销,这样在客户较多时的性能就会降低。
日期:07/26/2007 07:48:21 作者:Linuxidc
Linux极品内存检测软件 Memtest86
Linux极品内存检测软件 Memtest86,Memtest86是一款基于Linux核心的测试程序,所以它的安装和使用和其它内存测试软件有些不同。将Memtest86程序下载解压缩后,我们可以看到4个文件,其中Install.exe用来安装Memtest86程序到软盘。双击运行这个程序,在弹出窗口中的“Enter Target diskette drive:”后输入你的软盘驱动器的盘符,如a,然后回车。插入一张格式化过的软盘,单击回车开始安装,这样Memtest86就安装到软盘了。前面我们说过Memtest86是基于Linux核心的,所以在Windows的资源管理器里我们看不到软盘上的内容(不要误认为软盘里没有内容)。如果没有软驱,Memtest86的主页有该软件的ISO文件,可以直接刻录到光盘,用光驱启动后进行测试。
日期:07/25/2007 07:25:10 作者:Linuxidc
Linux不编译2.6内核直接给iptables加模块
Linux不编译2.6内核直接给iptables加模块
日期:07/25/2007 07:23:46 作者:Linuxidc
Linux内核:修改TCP/IP调优参数
Linux内核:修改TCP/IP调优参数,所有的TCP/IP调优参数都位于/proc/sys/net/目录. 例如, 下面是最重要的一些调优参数, 后面是它们的含义:
日期:07/24/2007 07:14:22 作者:Linuxidc
Linux下使用Eclipse开发C/C++程序
Linux 是一个以C/C++开发为主的平台,无论是Kernel或是Application,主要都使用C/C++开发。传统在Linux下开发程序,是在文字模式下,利用vi等文字编辑器撰写C/C++程序存盘后,在Command line下使用gcc编译,若要debug,则使用gdb。
这种开发方式生产力并不高,若只是开发学习用的小程序则影响不大,但若要开发大型项目时,程序档案个数众多,需要用project或solution的方式管理;且debug时breakpoint的加入,单步执行,观察变量变化等,都需要更可视化的方式才能够增加生产力;最重要的,由于现在的程序语言皆非常的庞大,又有复杂的函式库,要程序员熟记所有的程序语法和function名称,实在很困难,所以语法提示(Intellisense)的功能就非常重要,这些就必须靠IDE来达成。
日期:07/23/2007 07:24:10 作者:Linuxidc
在ubuntu系统中源码编译postgresql8.2.1
在ubuntu系统中源码编译postgresql8.2.1,在 ubuntu下 一般只需要 sudo apt-get install ***软件名,就可以把自己需要的软件安装到系统了,然而 如果自己有洁癖 非要 安装最新的软件包的话
日期:07/22/2007 05:49:58 作者:Linuxidc
32位Linux单进程有4G内存的限制
可用下面代码测试系统能给单进程分配多少用户态内存,这段代码在32位系统上执行,返回3066M;在64位系统上执行,系统最后会变得负载很高,然后内核就把进程kill了。这说明32位系统上单进程是有内存分配限制的,而64位则没有。
日期:07/22/2007 05:48:59 作者:Linuxidc
Linux-gate.so.1的含义
2.6的内核的系统调用的入口在那里,内核里说是0x80,可实际的机器呢?当你在一个比较新的linux系统下使用ldd命令时,你会经常看到一个比较奇怪的文件名,即linux-gate.so.1:
日期:07/21/2007 09:39:24 作者:Linuxidc
OpenSUSE补丁教程(kernel 2.6.x)
什么是内核
内核是 Linux 系统的核心,提供硬件抽象层、磁盘及文件系统控制、多任务并发管理等底层功能的系统部件。 出于种种原因,一般要对原始内核进行修改。而修改源代码的工作是由打补丁实现的,每个内核补丁都实现一个特定的功能。补丁下载的地址比较分散,自行搜索比较有效。
日期:07/21/2007 09:38:46 作者:Linuxidc
ubuntu7.04 安装ELDK4.1交叉编译环境
ubuntu7.04 安装ELDK4.1交叉编译环境
日期:07/21/2007 09:38:14 作者:Linuxidc
linux下的deamon进程
linux下的deamon进程,syslog将连接syslogd这个服务,在/var/log/message这个文件里面输出消息,所以需要启动syslogd服务。否则在/var/log/message这个文件里面不会有显示。
日期:07/21/2007 09:37:40 作者:Linuxidc
读Linux内核源代码有感
大家都知道,Linux内核源代码是用C语言写的,C是一个面向过程的语言,但在整个Linux Kernel里面,你所能感触的,几乎全是面向对象的感觉。可以说近乎所有的代码,无论巨细,都是以一种面向对象的方式写出来的。但C语言毕竟不是一种面向对象的语言,所以硬是以一种面向对象的方式去写程序,带来的一个问题就是对象之间的关系特别杂乱。如果在读代码之前没有对相关部分的概念层次有所把握,深入到代码后就感觉难以理清各个对象之间的关系,即使少部分代码,也会让人感觉力不从心。实际上,Linux内核源代码的编写有一些固定的套路,当你熟悉了这套路之后,这种困扰就会慢慢的减少,阅读的速度和质量也会随之提升。
日期:07/21/2007 09:36:58 作者:Linuxidc
Linux系统下的ldd
Linux系统下的ldd,ldd能够显示可执行模块的dependency,其原理是通过设置一系列的环境变量,如下:LD_TRACE_LOADED_OBJECTS、LD_WARN、LD_BIND_NOW、LD_LIBRARY_VERSION、LD_VERBOSE等。当LD_TRACE_LOADED_OBJECTS环境变量不为空时,任何可执行程序在运行时,它都会只显示模块的dependency,而程序并不真正执行。要不你可以在shell终端测试一下
日期:07/20/2007 07:06:58 作者:Linuxidc
linux下内存学习札记
一直在使用并学习着linux,下面是我通过阅读别人的文章,整理出来的笔记,供跟我一个级别的菜鸟参考学习吧,同时自己也可以复习。Linux在内存管理上份为两级,一级是线性区,类似于00c73000-00c88000,对应于虚拟内存,它实际上不占用实际物理内存;一级是具体的物理页面,它对应我们机器上的物理内存。
日期:07/19/2007 08:05:57 作者:Linuxidc
Linux兼容Win32程序,“一个框架、两个界面”
Linux兼容Win32程序,"一个框架、两个界面"我们开发Linux兼容内核的目标是让Windows应用软件可以直接在这个内核上运行,更确切地说是在以这个内核为核心的操作系统上运行。同时, 还要让为Windows而开发的一些设备驱动模块也能装入这个内核运行。这一方面是因为针对Windows开发的设备驱动模块在数量和品种上都远远多于 Linux;另一方面是因为有愈来愈多的应用软件需要跟专用的设备驱动模块配套运行,缺了这设备驱动模块就运行不起来。只有同时实现了这两个目标,才能说 Linux的内核兼容了Windows内核。那么,为了要达到这两个目标,我们必须对Linux内核作些什么修改和扩充呢?本文就是要对此作一分析,并回 答这个问题。
日期:07/19/2007 08:05:04 作者:Linuxidc
Linux Kernel Development(中文译名Linux内核设计与实现)勘误
Linux Kernel Development(中文译名Linux内核设计与实现)勘误
日期:07/19/2007 08:04:13 作者:Linuxidc
调试Linux下的core文件
调试Linux下的core文件,如果产生异常,程序退出;除了直接用gdb调试程序,用bt查看堆栈之外,还可以查看程序下产生的core文件,从而跟踪到历史的错误问题。
日期:07/18/2007 07:43:19 作者:Linuxidc
Linux下C语言编程学习
怎么查看全部命令?
要想在Linux下方便迅速地工作,熟悉Linux命令是一个必须的过程。从我们常见的命令ls出发怎么才能知道全部的命令呢?

首先,用which命令获得ls命令的路径:
which ls

此命令输出如下:/usr/bin/ls

然后查看/usr/bin/ls这个文件是由哪个软件包提供的,用下面这个命令:dpkg -S /usr/bin/ls
日期:07/18/2007 07:37:35 作者:Linuxidc
vmware 6在linux2.6.22内核下安装编译模块错误的解决办法
看到linux的新版的kernel 2.6.22发布了,于是把它拖下来编译安装到系统上了。用着也没有感觉到什么问题,突然发现vmware不能用了,根本不能启动,忽然想起来vmware下的模块要重新配置一下。 一路回车下来,发现vmnet这个模块竟然不能编译通过,郁闷,赶紧看看代码吧。
日期:07/17/2007 07:24:31 作者:Linuxidc
Linux负载的定义
使用uptime或者top命令,都可以看到一个负载的输出,形如load average: 0.00, 0.03, 0.00,这个负载到底是什么东西呢,man文档里只是一笔带过,没有具体的给出负载的定义。 负载的统计,必然是由内核完成的,因此在内核源码中找答案是再好不过的事情了,找来2.6.21的内核源码,开始探索。
日期:07/17/2007 07:23:58 作者:Linuxidc
在Linux上运行C#
众所周知,C#是Microsoft推出的.NET语言,只能在.NET平台上运行,例如Win 9x、ME、NT、2000、XP和Win CE之类的操作系统。但是,现在却有了一个叫做Mono的项目,它的目标就是把.NET及其编程语言移植到非Windows的平台上。现在,C#是唯一被移植到非Windows平台的.NET语言。
日期:07/17/2007 07:23:30 作者:Linuxidc
子shell与export命令
子shell与export命令,登录到系统后,系统将启动一个用户shell。在这个shell中,可以使用shell命令或声明变量,也可以创建并运行shell脚本程序。运行shell脚本程序时,系统将创建一个子shell。此时,系统中将有两个shell,一个是登录时系统启动的shell,另一个是系统为运行脚本程序创建的shell。当一个脚本程序运行完毕,它的脚本shell将终止,可以返回到执行该脚本之前的shell。从这种意义上来说,用户可以有许多shell,每个shell都是由某个shell(称为父shell)派生的。
日期:07/16/2007 02:30:52 作者:Linuxidc
Fedora 7编译内核终于成功了
Fedora 7编译内核终于成功了,首先说说编译内核的原因,自己的电脑一直无法关机,以前在fc4时还是可以的,可是没有声音,于是升级内核,可升级后的结果是有声音了,但无法关机。看网上帖子改grub文件也没有解决,曾经尝试编译内核多次,但每次编完后都无法启动,不是无法找到/roott就是kernel panic,分析,上网查类似贴子,始终没找出原因。于是这一次,我直接把升级后的内核2.6.21-1.3228.fc7的config文件复制到我下载解压后的linux-2.6.21.5内核文件夹下,具体步骤如下:
日期:07/16/2007 02:29:43 作者:Linuxidc
Linux最简单的驱动模型:hello world!
Linux最简单的驱动模型:hello world!
日期:07/15/2007 07:07:54 作者:Linuxidc
内容分类