手机版
你好,游客 登录 注册
rss订阅 手机访问 
Linux编程
推荐下比较好的Linux内核参考书
  a.《Linux Device Drivers, 2nd Edition》,有中文译本

  b.《Understanding the Linux Kernel, 2nd Edition》

  c.《Linux内核源代码情景分析》,分上下两册

  d.《边干边学-Linux内核指导》

  e.《Linux内核2.4版源代码分析大全》
日期:09/19/2007 07:36:59 作者:Linuxidc
Linux源代码查看工具

  a. Windows系统可以用Source Insight,Linux系统可以用Source Navigator。

  b. vim或emacs编辑器,配合cscope、ctags、etags等交叉索引工具。

  c. vim或emacs编辑器,配合grep、egrep等文本搜索工具,不过最好要对源代码目录结构有所熟悉

  d. LXR,以网页的形式通过浏览器浏览,安装复杂(debian下安装容易,请版面搜寻lxr)

日期:09/19/2007 07:35:22 作者:Linuxidc
深入学习嵌入式Linux编程
  其实从很早我就想深入学习Linux,但时间有限,并且Linux门槛挺高,不是很容易上手。最近由于隧道项目中用到嵌入式Linux(Arm CPU上的Linux),并且提供硬件的单位针对Linux的编程收费很高,并且时间很长,所以犹豫再三,决定开始深入学习Linux,并在学习过程中完成预定的任务。

  没有想到,在嵌入式Linux上运行一个最简单的“Hello Liunx”程序就费了很大的周折,不过功夫不负有心人,经过几天的艰难跋涉,总算成功了,下面我把我的历程说一下,给后来人有个参考。

  要想在嵌入式Linux运行程序,需要有下面几个问题解决:
日期:09/18/2007 07:12:24 作者:Linuxidc
Linux 有关运行中的进程的信息
Linux 有关运行中的进程的信息,/proc 文件系统可以用于获取运行中的进程的信息。在 /proc 中有一些编号的子目录。每个编号的目录对应一个进程 id (PID)。这样,每一个运行中的进程 /proc 中都有一个用它的 PID 命名的目录。这些子目录中包含可以提供有关进程的状态和环境的重要细节信息的文件。让我们试着查找一个运行中的进程。

$ ps -aef | grep mozilla
root 32558 32425 8 22:53 pts/1 00:01:23 /usr/bin/mozilla

上述命令显示有一个正在运行的 mozilla 进程的 PID 是 32558。相对应的,/proc 中应该有一个名叫 32558 的目录
日期:09/17/2007 17:21:00 作者:Linuxidc
在ARM-Linux平台上移植SQLite

本文中采用的硬件平台为Sitsang嵌入式评估板。Sitsang评估板的核心是PXA255嵌入式处理器。底层软件系统是以ARM-Linux内核为基础的。

要将SQLite3移植到Sitsang评估板上,除了要有底层操作系统的支持外,还必须要有相应的交叉编译工具链。由于Sitsang评估板采用的是ARM-Linux作为底层操作系统,因此需要首先安装ARM-Linux工具链。关于ARM-Linux工具链的安装可以参阅文献[4]。ARM-Linux工具链通常安装在/usr/local/arm-linux/bin/目录下,通常以arm-linux-开头。本文中将会涉及到的主要是arm-linux-gcc、arm-linux-ar、arm-linux-ranlib这样三个工具。

日期:09/16/2007 19:18:48 作者:Linuxidc
Linux中内存buffer和cache的区别
  free
  free 命令相对于top 提供了更简洁的查看系统内存使用情况:

  $ free
  total used free shared buffers cachedMem: 255268 238332 16936 0 85540 126384-/+ buffers/cache: 26408 228860Swap: 265000 0 265000

  Mem:表示物理内存统计
  -/+ buffers/cached:表示物理内存的缓存统计
  Swap:表示硬盘上交换分区的使用情况,这里我们不去关心。

  系统的总物理内存:255268Kb(256M),但系统当前真正可用的内存b并不是第一行free 标记的 16936Kb,它仅代表未被分配的内存。
日期:09/16/2007 07:32:45 作者:Linuxidc
Linux下共享库(SO)有关的几个环境变量
LD_PROFILE/LD_PROFILE_OUTPUT:为指定的共享库产生profile数据,LD_PROFILE指定共享库的名称,LD_PROFILE_OUTPUT指定输出profile文件的位置,是一个目录,且必须存在,默认的目录为/var/tmp/或/var/profile。通过profile数据,你可以得到一些该共享库中函数的使用统计信息。
日期:09/16/2007 07:32:10 作者:Linuxidc
Linux系统处理laptop hotkeys的方式
  我这几天的学习,要想让笔记本上的hotkey完全能够正常工作,要许多方面一起协同才行。

  1,硬件厂商在bios中对linux的支持程度。我的机器在启动后,用dmesg| grep -i acpi,就会发现在load acpi 的时候有两三个错误。我想这会导致一些hotkey在系统中,用那些acpi_listen或者xev抓不到按键,即没有输出相应的 keycode。这需要修改dsdt了。硬件厂商不支持,只能做一些hacking的工作,搞过嵌入式驱动开发的朋友,应该都不在话下。风险有,细心就能 对付。
日期:09/15/2007 07:18:55 作者:Linuxidc
在Ubuntu中缺少libstdc++共享库问题的解决方法
  在Ubuntu 7.04上运行jad或者其他的命令需要 libstdc++-libc6.2-2.so.3共享库的支持时,会报如下错误:

  error while loading shared libraries: libstdc++-libc6.2-2.so.3: cannot open shared object file: No such file or directory

  如果你试图安装libstdc++的共享库的时候会发现系统已经安装了最新的libstdc++的版本,但是还是会报以上错误?在这里找到了解决方法。
日期:09/15/2007 07:18:19 作者:Linuxidc
嵌入式Linux综合知识
嵌入式Linux综合知识,Tomlinux 嵌入式Linux文档、资源及下载,提供免费版本的���入式Linux系统。

Linuxforum Linux技术交流与提问,有什么问题去那里发问,肯定会有所帮助。

Freshmeat 有许多Linux项目资源,内容丰富,版本最新还可发布自己的项目。

Sourceforge 最著的名源码下载网站,内容丰富,版本最新还可发布自己的项目。

GNU 查阅各种标准,下载GNU软件。

Kernel 下载最新内核及查阅Linux内核的最新动向。
日期:09/14/2007 06:23:34 作者:Linuxidc
Fedora Core服务器调试手记
Fedora Core服务器调试手记,我想大家有不少都成功实现apache+php+mysql,网上的文章也有不少,但我发现不少文章都是抄来抄去,并且没有说明白编译的方式,有的索性apache1.3的编译方法原封不动的搬过来套在apache2.0,显然误导一些菜鸟。

我今天就以apache+mysql+php说一下静态编译和DSO动态编译的区别,我会分别拿apache1.3.27和apache2.0.46

说明,因为两个版本的编译命令是有所区别的。
日期:09/13/2007 07:28:12 作者:Linuxidc
Linux开发环境
编程库
头文件
汇编器
分析器
编译器
链接器
调试器
文本编辑器
编程工具

内核源代码文件和头文件 /usr/src/linux

C的开发库 glibc

源代码调试器 gdb (GNU Debugger), kdbg, ddd, xdgb

indent 能够按照许多预先定义好的或者自定义的标准调整源代码以及代码缩进的格式以达到所需的风格。
日期:09/13/2007 07:27:21 作者:Linuxidc
Linux系统下的多线程编程-条件变量&信号量

条件变量

  使用互斥锁来实现线程间数据的共享和通信,互斥锁一个明显的缺点是它只有两种状态:锁定和非锁定。而条件变量通过允许线程阻塞和等待另一个线程发送信号的方法弥补了互斥锁的不足,它常和互斥锁一起使用。使用时,条件变量被用来阻塞一个线程,当条件不满足时,线程往往解开相应的互斥锁并等待条件发生变化。一旦其它的某个线程改变了条件变量,它将通知相应的条件变量唤醒一个或多个正被此条件变量阻塞的线程。这些线程将重新锁定互斥锁并重新测试条件是否满足。一般说来,条件变量被用来进行线承间的同步。

  条件变量的结构为pthread_cond_t,函数pthread_cond_init()被用来初始化一个条件变量。它的原型为:

日期:09/12/2007 13:43:09 作者:Linuxidc
Linux中安装内核
  编译完成后, 在 arch/i386/boot目录中会有bzImage映象文件.

  安装内核步骤如下:
  (1)在/boot目录下新建mynewkernel目录,并将bzImage拷贝到/boot/mynewkernel目录下:

  $ sudo cp arch/i386/boot/bzImage /boot/mynewkernel

  (2)更改/boot/mynewkernel中bzImage的名字
  $ sudo mv bzImage vmlinuz-2.6.17.13

  (3)备份、修改grub配置文件
  $sudo cp /boot/grub/menu.lst menu.lst.origin

  修改menu.list,加入以下内容(从既有的menu.list中相关的内容拷贝):
日期:09/12/2007 06:21:52 作者:Linuxidc
Linux下用gcc编译使用了math库函数的程序出错的解决
  解决方法:
  编译器有一些比较通用的参数,其中的-l用来标识要链接的库信息:

  -lm 表示需要链接数学库libm.a或libm.so或libm.sl

  使用如下编译命令告诉程序数学库的位置即可
日期:09/11/2007 06:11:46 作者:Linuxidc
Linux内核基础知识学习
对内核相关概念有一定的了解. 关于Linux kernel的介绍浩如烟海, 这里只介绍系统中相关的目录, 文件及命令.

/boot

/boot/vmlinuz- : 用于启动的压缩内核镜像, 它也就是/arch//boot中的压缩镜像.
/boot/system.map- : 存储内核符号地址.
/boot/initrd.img- : 初始化RAM硬盘时, 用来存储挂载根文件系统所需的模块.
/boot/grub/menu.lst : grub的配置文件. (不同的发行版中它可能位于不同位置.

/lib/modules
日期:09/10/2007 06:37:48 作者:Linuxidc
Linux Shell编程学习
Linux Shell编程学习,Shell变量 主要有本地变量和环境变量。

1、本地变量 -- 在用户现有运行的脚本中使用
1) 定义本地变量 格式: variable-name=value
例子:[root@jike1 /root]# LOCALTEST="test"
[root@jike1 /root]# echo $LOCALTEST (注意:echo $LOCALTEST 和 echo ${LOCALTEST}的效果是一样的)
(在变量名前加$, 可以取得此变量的值,使用echo命令可以显示变量的值)
日期:09/09/2007 07:14:23 作者:Linuxidc
基于2.6.19内核小型Linux系统制作与移植
  ARM9 S3C2410微处理器与Linux的结合越来越紧密,逐渐在嵌入式领域得到广范的应用。目前,在便携式消费类电子产品、无线设备、汽车、网络、存储产品等都可以看到S3C2410与Linux相结合的身影。

  S3C2410微处理器是一款由Samsung公司为手持终端设计的低价格、低功耗、高性能,基于ARM920T核的微处理器。它带有内存管理单元(MMU),采用0.18mm工艺和AMBA新型总线结构,主频可达203MHz。同时,它支持Thumb 16位压缩指令集,从而能以较小的存储空间获得32位的系统性能。
日期:09/08/2007 07:03:46 作者:Linuxidc
交互式Linux内核地图
  作为 Linux 系统心脏的 Kernel 想必是博大精深,无论是对于源代码的分析,还是想要查阅其中的函数,恐怕都是一件比较麻烦的事情。而 Interactive Linux kernel map(交互式 Linux 内核地图)这个在线工具的出现,无疑会为那些喜欢钻研 Linux 核心的朋友起到较为方便的作用。

  这个交互式 Linux 内核地图允许你使用鼠标对其进行操作。
日期:09/08/2007 07:02:31 作者:Linuxidc
redhat上用rpm包方式升级gcc
  本人在前面编译kgdb的时候,由于内核配置的缘故(详见本人blog《在vmware上建立kgdb调试linux kernel源码的平台》文章),编译一直通不过,所以最早本人怀疑是redhat上的gcc版本太低(3.2.2)所致。Gcc版本升级至3.4.6后发现不是版本的缘故。但是这样一来,倒是实践了一下gcc的rpm升级方式。这边就把gcc升级的rpm方式以大家分享一下:
日期:09/07/2007 06:11:14 作者:Linuxidc
SUSE EL下编译Apache
SUSE EL 9
httpd-2.2.4

1
先将系统安装时安装的APACHE2卸载掉
rpm -e apache2
然后会提示很多依赖需要先卸载,再一一先卸载后即可卸载完出现两个相互依赖的则需要使用
rpm -e apache2 --nodeps

2
#tar -zxvf httpd-2.2.4.tar.gz
#cd httpd-2.2.4
#./configure --prefix=/opt/app/apache-2.2.2 \
--enable-ssl --enable-so --disable-info \
日期:09/07/2007 06:08:47 作者:Linuxidc
Linux下使用GCC CPU参数优化代码编译
Linux下使用GCC CPU参数优化代码编译,使用特定的GCC参数可以使编译出的程序执行效率有较大提升。具体如下:

1、优化原理:
在编译程序时,借助参数传递的方法,使用与系统CPU相匹配的gcc参数,编译出的程序就是为系统CPU而进行特定优化过的,因而执行速度和效率都会是最好。

2、注意事项
(1) 经过大量测试发现,在RedHat, CentOS系统中通常只能通过参数传递的方法进行编译优化,当然,如果愿意并且能够修改程序的MakeFile也可以达到这一效果,只不过比较复杂,工作量较大。其他在网上广为流传的方法(例如:直接通过.bashrc, /etc/profile声明参数系统变量、写入/etc/make.conf等)经过测试均没有效果。
日期:09/06/2007 06:10:12 作者:Linuxidc
Linux内核简单学习
在内核态下运行的进程不能被其它进程抢占,而且一个进程不能改变另一个进程的状态。为了避免进程切换时造成内核数据错误,在执行临界区代码时,禁止中断。只有当进程从“ 内核运行态” 转移到“ 睡眠状态”时,内核才会进行进程切换操作。

linux内核包括5个模块:进程调度,内存管理,文件系统,进程间通信,网络接口进程调度是对cpu资源的控制内存管理是对存储资源的控制所有的模块都依赖于进程调度。
日期:09/05/2007 06:25:48 作者:Linuxidc
vmware虚拟机在Linux上安装时关于内核头文件
vmware虚拟机在Linux上安装时关于内核头文件,直接说吧,vmware的作用不用介绍了,像 dorainm这种自己摆弄系统底层的,经常用 vmware弄个freeBSD、linux-2.4.x、linux-2.6.x之类的玩!

大家在安装vmware后,运行vmware-config.pl,经常会卡在内核头文件这里

None of the pre-built vmmon modules for VMware Workstation is suitable for your running kernel. Do you want this program to try to build the vmmon module for your system (you need to have a C compiler installed on your system)? [yes]
日期:09/04/2007 06:07:38 作者:Linuxidc
编译Linux2.6.22时一个错误的解决
编译Linux2.6.22时一个错误的解决,

lhbdesktop:/usr/src/linux# make menuconfig

HOSTCC scripts/kconfig/lxdialog/checklist.o

In file included from scripts/kconfig/lxdialog/checklist.c:24:

scripts/kconfig/lxdialog/dialog.h:32:20: error: curses.h: No such file or directory

In file included from scripts/kconfig/lxdialog/checklist.c:24:

日期:09/03/2007 06:12:58 作者:Linuxidc
ssh乱码问题的解决
ssh乱码问题的解决,  WindowsXP下使用SecureCRT SSH到rhel5上使用gcc 编译程序居然发现出错信息里面带乱码,且多到几乎看不清意思的程度。设置LC_ALL,LANG等环境变量无效,到google一下居然没有找到类似的问题,难道全世界只有我一个人运气好碰到这个问题吗?

  无奈直接本地使用rhel5机器的图形界面,竟然没有这个问题!恍然大悟!肯定是ssh终端程序的设置问题!立即修改SecureCRT的Terminal->Emulation 的terminal选项,选择Linux。重新gcc,问题解决!
日期:09/02/2007 07:07:30 作者:Linuxidc
kernel 2.6.22.5成功编译笔记
终于在自己的笔记本上面通过了。找了N多资料,最后在于通过了。能正常启动,编译成功了。

之前编译后老是出现下面的错误提示:
BusyBox v1.01 (Debian 1:1.01-4ubuntu3) Built-in shell

Enter 'help' for a list of built-in commands.

/bin/sh: can't access tty; job control turned off

(initramfs)

后来找了N多资料,但是有很都出现这样的错误,但是都没有真正解决的办法,后来发现一个奇怪的问题,可能是这个问题导致的。
日期:09/02/2007 07:06:06 作者:Linuxidc
Linux内核模块以及驱动的编写过程
Linux内核模块以及驱动的编写过程,  Linux内核是一个整体是结构,因此向内核添加任何东西,或者删除某些功能,都十分困难。为了解决这个问题引入了内核机制。从而可以动态的想内核中添加或者删除模块。

  模块不被编译在内核中,因而控制了内核的大小.然而模块一旦被插入内核,他就和内核其他部分一样.这样一来就会曾家一部分系统开销。同时,如果模块出现问题,也许会带来系统的崩溃。
日期:09/01/2007 09:03:25 作者:Linuxidc
debian Linux驱动开发
debian Linux驱动开发, 应该说debian发展到了4.0r0 , 他的桌面系统已经变得很完美了,我原来一直用到3.3后实在不能忍受,就转用了ubuntu6的桌面系统,但是现在转回来发现 4.0r0和ubuntu没什么特别的区别了,而且更加稳定。我在ubuntu下面中文输入法和gaim经常会起冲突而出错,而在debian下没出现这个问题。 这里我要介绍的是如何在debian下配置broadcom网卡的问题。
日期:08/30/2007 06:51:24 作者:Linuxidc
Linux C开发面试试题与答案
Linux C开发面试试题与答案
日期:08/29/2007 06:23:59 作者:Linuxidc
用apt-get来卸载ubuntu Linux旧内核
用apt-get来卸载ubuntu Linux旧内核,使用Ubuntu一段时间后,就会发觉由于自动升级,系统里安装了很多内核。像我,竟然安装了下面那么多,这个造成了漫长的启动列表。必须删掉一些不用的。

首先就是使用如下命令,列出所有安装的内核,下表中,带有image的就是内核文件。从中选择要卸载的包,用apt-get来卸载
日期:08/29/2007 06:22:44 作者:Linuxidc
利用Shell脚本来实现vi/cp/mv前自动备份源文件
利用Shell脚本来实现vi/cp/mv前自动备份源文件,以下脚本把所有要编辑的源文件备份到/bak目录下,并且所有的路径位置保持不变,比如vii /etc/hosts,则把/etc/hosts复制到/bak/etc/hosts。

# cat /sh/vii

#!/usr/bin/bash

#判断源文件是否存在,存在才执行备份操作

if [ -f "$1" ];then

#创建函数,可实现任意键继续

#如果你的机器上不认stty raw那么把函数中两处出现的raw换成cbreak
日期:08/29/2007 06:21:09 作者:Linuxidc
ubuntu编译时makefile找不到的解决方法
#如果是需要编译的环境,推荐安装"build essential"包
#sudo apt-get install "build-essential"
在用./configure ,make , makeinstall ,方法安装软件是,经常会发生发生各种错误,
而导致无法声称 makefile
现在我把我安装过程中遇到的问题以及解决办法写下来,希望对大家有点帮助
以我安装 pidgin-2.0.0为例

./configure 出现错误 :
日期:08/28/2007 06:39:20 作者:Linuxidc
放一个vi脚本在不脱离vi的情况下编译单个文件
放一个vi脚本在不脱离vi的情况下编译单个文件,具体用法:

1、把下列代码加入你的.vimrc文件(~\.vimrc)
"this script use to excute make in vim and open quickfix window
nmap B :call Do_make()
nmap C :cclose
function Do_make()
let filename = bufname("%")
let suffix_pos = stridx(filename, ".c")
日期:08/27/2007 06:58:24 作者:Linuxidc
linux so 库的深入理解
linux so 库的深入理解,经常见有人提起关于库的种种问题,今天我也终于按捺不住,根据自己的经验,实验,学习中得到的一些,来说说自己的一点看法.
我们都知道库对系统的重要.没了它,系统几乎无法运转,包括LFS整个过程至少是对工具链调整来调整去的过程是以对库的倚赖为核心的.这其中又以动态库为精华.
那先来说简单的静态库.它简单到只是ar打包的目标文件的集合罢了,于是,它的作用也就和目标文件没什么区别了,链接进目标文件,ok,使命完成,至于程序以后的事包括运行则和这个静态库没有关系了.其实我觉的最有说服力的就是例子了,那我们就举最简单的例子.
日期:08/26/2007 07:12:06 作者:Linuxidc
Linux系统内存产生错误的原因与调试方法
Linux系统内存产生错误的原因与调试方法,  总而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址.

  一般来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由gdtr来保存的,他是一个48位的寄存器,其中的32位是保存由它指向的gdt表,后13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运行级别,指向的gdt是由以64位为一个单位的表,在这张表中就保存着程序运行的代码段以及数据段的起始地址以及与此相应的段限和页面交换还有程序运行级别还有内存粒度等等的信息。一旦一个程序发生了越界访问,cpu就会产生相应的异常保护,于是segmentation fault就出现了.
日期:08/25/2007 07:30:58 作者:Linuxidc
Linux动态连接库示例
Linux动态连接库示例
日期:08/25/2007 07:29:38 作者:Linuxidc
详解Linux平台下的Oracle数据库编程
详解Linux平台下的Oracle数据库编程,

1.引言

  由于PL/SQL不能用来开发面向普通用户的应用程序,必须借助其他语言或开发工具。在Linux操作系统下应该用什么语言或开发工具来进行Oracle数据库应用的开发呢?本文将介绍2种方案:Pro*C、JDBC。而另一种SQLJ方法,限于篇幅省略。

2. 环境设置

2.1 软件环境

  本文的实验环境是在Red Hat Linux 8.0操作系统下,因为Oracle 9i要求至少512MB内存,所以我们选择Oracle 8.1.7.0.1作为数据库环境。说明一点:Oracle 8i的典型安装不包括Pro*C,需要在定制安装方式下将开发工具中的Pro*C选中。我们选择安装JDK的版本是J2SE 1.4.1 For Linux,其实JDK 1.1.6以上版本都可以。

日期:08/25/2007 07:19:51 作者:Linuxidc
Linux下运用GDB来调试程序的方法
  在Linux下调试程序一般用GDB来执行。

  这里简要介绍一下是否gdb调试程序的方法:

  (1)进入gdb调试:
  gdb + 已经编译通过的可执行程序 -》 就进入调试模式。例如:gdb MiddlePublisher

  (2)r + 运行时的参数 -》 开始运行可执行程序。例如 r -lxml2 -f refile

  (3)b + 断点 -》设置调试的断点。两种:一种是:b CMSTask.cpp:200 表示在CMSTask.cpp文件的第200行设置断点。另一种:b TaskManager
日期:08/24/2007 06:58:53 作者:Linuxidc
Linux下的C++编程初识
Linux下的C++编程初识,

  Linux下C++编程和在Windows下的没有什么两样,它同样需要编译、链接、调度、运行等步骤,只不过执行这些步骤在两种操作系统下所做的不是同样的事情。

  在Windows下有TC, BC, VC等编译器,它们极大地方便了程序的编辑编译等,在Windows下你只需要看明白菜单就可以了。而在Linux下是Gcc, G++, Gdb等工具,刚开始时你可能甚至不知道如何下手去调试程序,你也可能甚至不知道程序在哪里编辑。不过这些都不是问题,慢慢来我们都能行!

日期:08/23/2007 20:31:52 作者:Linuxidc
Linux-2.6.21.3编译详细过程总结
Linux-2.6.21.3编译详细过程总结,系统:RedHat RHEL5 (2.6.18-8.el5)
1、从www.kernel.org下载linux-2.6.21.3.tar.bz2
#wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.3.tar.bz2
2、解压到/usr/src
#tar jxvf linux-2.6.21.3.tar.bz2 -C /usr/src/linux-2.6.21.3;cd /usr/src/
3、创建一个linux-2.6.21.3的软连接 linux
#ln -s /usr/src/linux-2.6.21.3 /usr/src/linux;cd /usr/src/linux
4、优化,修改内核源代码
日期:08/23/2007 20:29:08 作者:Ajian
关于Linux下/sbin/init程序的执行过程
关于Linux下/sbin/init程序的执行过程,init进程的主要任务是根据/etc/rc文件中设置的信息,执行其中设置的命令,然后根据/etc/inittab文件中的信息,为每一个允许登录的终端设备使用fork()创建一个子进程,并在每个新创建的子进程中运行agetty (getty)程序。而init进程则调用wait(),进入等待子进程结束状态。每当它的一个子进程结束退出,它就会根据wait()返回的pid号知道是哪个对应终端的子进程结束了,因此就会为相应终端设备再创建一个新的子进程,并在该子进程中重新执行agetty程序。这样,每个被允许的终端设备都始终有一个对应的进程为其等待处理。
日期:08/23/2007 07:54:35 作者:Linuxidc
Linux javac 出现段错误的解决
Linux javac 出现段错误的解决,上GOOGLE找了很多资料,没有发现,后来突然想起来,我把系统的语言从英文改成了中文,换回英文。
日期:08/23/2007 07:13:01 作者:Linuxidc
Linux下共享库的建立
Linux下共享库的建立,大多数LINUX程序都使用共享库。如果你感觉不到的话,大多数的C程序要用到的共享库libc.so.X,其中X是版本号。

1、检查程序的共享库

用ldd程序可以查询可执行程序所需要的共享库。下面是对一个用gcc2.96编译器编译的一般C程序做的查询(该程序使用的是ELF二进制格式):
日期:08/22/2007 07:33:21 作者:Linuxidc
在Linux编程中使用gcc
在Linux编程中使用gcc,为了了解linux的内核,使用vmware装了个Debian Linux。由于用惯了windows 一下子还改变不过来思维习惯(windows真是害人不浅啊^_^)。哈哈,装了后先写个c程序热热身,找了半天gcc竟然没装(因为是只装了debian的基本系统),那就先装个gcc吧。使用linux自带的软件管理器,插入安装盘,找到gcc,点击apply即可(看似简单的一句话,花了我n久时间啊)。
日期:08/22/2007 07:32:21 作者: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/22/2007 07:31:07 作者:Linuxidc
Linux下查找一个函数在哪个库文件中
  关于怎样查出一个库函数到底在哪个库文件中,我想到一个变通的办法,以查找fcntl函数在哪个库文件中为例吧:
  1、找到一个使用fcntl的可执行文件,如test_fcntl。实在不行,自己编一个只有fcntl函数的c文件,然后编译一下得了。
  2、使用“ldd test_fcntl”命令,可以追踪出该可执行文件到底使用了哪些库文件。通常可能有几个到几十个。
日期:08/21/2007 07:45:16 作者:Linuxidc
linux下sysctl命令的使用:保存内核参数并起效
linux下sysctl命令的使用:保存内核参数并起效,1, sysctl命令的作用
     在运行时配置内核参数
2,用法举例:
      -w 用此选项来改变一个sysctl设置
     例:sysctl -w net.ipv4.ip_forward=1
     -p   载入sysctl配置文件
           如-p后未指定路径,则载入 /etc/sysctl.conf
     例: sysctl -p /etc/sysctl.conf
3,修改/etc/sysctl.conf可以保存设置在机器重启后仍然有效
日期:08/20/2007 10:09:15 作者:Linuxidc
关于Linux内核编译及应用层检测
关于Linux内核编译及应用层检测,1、下载
kernel source code(本人所用:fedora Core6, 2.6.18)
netfilter l7-protocols
2、
tar -zxvf linux-2.6.18.1.tar.gz
(内核源代码解压缩到/usr/src目录下linux-2.6.18.1)
tar -zxvf netfilter-layer7-v2.13.tar.gz
tar -zxvf l7-protocols-2006-06-03.tar.gz
(本人将其解压缩到root主目录下)
3、给系统打补丁(针对不同的系统内核,分别打netfilter和l7-protocols的补丁,在两个安装路径的readme里面有详细描述)
日期:08/19/2007 08:00:54 作者:Linuxidc
arm-linux-gcc与arm-elf-gcc有什么不同
arm-linux-gcc与arm-elf-gcc有什么不同,如果能用一句话说明白arm-linux-gcc和arm-elf-gcc的区别的话,如何来说呢?

arm-linux-gcc是针对arm + linux的开发环境的,kernel使用的是linux,不是uclinux,arm是有硬件MMU的。
日期:08/19/2007 07:59:05 作者:Linuxidc
内容分类