你好,游客 登录 注册 搜索
rss订阅 手机访问 
Linux编程
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
用ARM7发板为uCLinux交叉编译SDL

1 prepare

首先,要安装以arm-elf-gcc为代表的uCLinux工具链,我采用的arm-elf-gcc版本是2.95.3;其次要准备好SDL源代码包,我采用的SDL源代码版本是1.2.5;最后,你得自己在开发板上把uCLinux跑起来,顺便说一下,我所用的开发板是ARM7。

假定解压后SDL源代码的根目录为/home/rockins/SDL/SDL-1.2.5/,安装目录设置为/home/rockins/SDL/SDL-1.2.5/uclinux-build。在你的系统上,这两个目录应该根据具体情况而有所不同。

日期:08/18/2007 07:19:57 作者:Linuxidc
linux pm-suspend过程之我见
pm-suspend 正常流程:f 7

1.pm-suspend-->symbol link to /usr/lib/pm-utils/bin/pm-action
2.pm-action通过处理提取出命令的suspend字段放在 ACTION变量中
用suspend 为参数调用 /usr/lib/pm-utils/functions中的 pm_main
3.pm_main
pm_main()
{
if [ -n "$PM_LOGFILE" ]; then
exec > "$PM_LOGFILE" 2>&1 ##如果/var/log/pm-suspend.log存在,将所有echo输出重定向到该文件中
fi
日期:08/17/2007 06:59:30 作者:Linuxidc
Linux中建立文件名时添加当前系统日期的方法
Linux中建立文件名时添加当前系统日期的方法,使用`date +%y%m%d`
Example: mkdir `date +%y%m%d`
tar cfvz /tmp/bak.`date +%y%m%d`.tar.gz /etc

ymdHM代表年月日时分,可以通过date --hlep查看哪些字母代表什么
日期:08/16/2007 07:20:57 作者:Linuxidc
Linux与UNIX下编译的差异
Linux与UNIX下编译的差异,  Unix下大家一般都用cc进行编译,而LINUX下绝大多数软件都是用gcc编译,编译参数也有细节差异。

  仅列举一二:
  1、 -lsocket
  unix 如果用到socket的话,makefile需要加上 -lsocket,在linux中不再需要,因为,linux中libc.so里已包含含socket相关。

  2、 编译成so
  ${CC} -o $@ -shared -fPIC ${OBJECT}

  -shared 该选项指定生成动态连接库(让连接器生成T类型的导出符号表,有时候也生成弱连接W类型的导出符号),不用该标志外部程序无法连接,相当于一个可执行文件。
日期:08/16/2007 07:19:17 作者:Linuxidc
掌握学习linux下的编程
掌握学习linux下的编程,  虽说是以开源为基础的,而且在简单的程序上写起来是比较方便,不过有些时候确实让人头痛,让人想念微软的.Net或是MFC。

  首先是标准不统一,最近在写一个基于线程池的服务器程序,用到了semaphore,还是存在mmap中的无名semaphore,调试得很愉快,于是高兴地把程序分发往各服务器,没料到在第一个服务器上装的时候就郁闷掉了,发现进程会永远地阻塞在sem_wait()上。
日期:08/16/2007 07:17:47 作者:Linuxidc
在开源世界里我们的软件该如何编译
在开源世界里我们的软件该如何编译,基本上,尤其在Windows 和Mac OS X系统下,已经开发好的软件不需要用户再编译。程序员写好代码并编译后,封装为计算机可执行的二进制形式,用户就可以直接使用了。

然而现在,随着开源软件的增多,每个人都可以读和使用源代码,因而软件编译的最后一步工作已经转移到了用户身上,而且他们得根据自己使用的系统,Windows XP, Windows Vista, Mac OS X Tiger, Panther, Linux x86……来做编译工作。

如果你发现自己不得不编译一段软件的代码,那么过程并不复杂。虽然每段代码的性质各不相同,但有一套共同的方法。
日期:08/15/2007 06:48:59 作者:Linuxidc
阅读Linux内核源码从何处着手
阅读Linux内核源码从何处着手,  对Linux内核源码的分析,有两个很好的入口点:一个就是系统的引导和初始化,即从机器加电到系统核心的运行;另外一个就是系统调用,系统调用是用户程序或操作调用核心所提供的功能的接口。对于那些对硬件比较熟悉的爱好者,从系统的引导入手进行分析,可能来的容易一些;而从系统调用下口,则可能更合适于那些在dos或Uinx、Linux下有过C编程经验的高手。

  下面就以系统的引导和初始化为例,简要描述一下源代码的阅读线索
日期:08/15/2007 06:47:48 作者:Linuxidc
Linux初学者Patch程序使用攻略
Linux初学者Patch程序使用攻略,本文的目的是向Linux新手介绍一种无价的资源,Larry Wall的patch程序。patch是用来查找文件之间差异的GNU diff命令的一个接口;diff有很多选项,但是该命令最常用的用途是用来生成一个文件,该文件中列出了内容发生改变的行,显示两个原始文件、修改过的行以及由于内容没有变化而忽略掉的行。patch典型地用于把一个目录下的源代码文件更新到新的版本,从而就避免了下载整个新的源代码档案的必要。下载一个有效的 patch仅仅需要下载发生变化的那些代码行就可以了。
日期:08/15/2007 06:46:00 作者:Linuxidc
Linux中构建内核小结
Linux中构建内核小结,  首先清理一下东西:
  $ sudo make-kpkg clean

  然后
  $sudo make-kpkg -initrd –revision=lk_517 kernel_image kernel_headers modules_image

  lk_517是可以自己换得,表示镜像的名字,必须要以数字结尾。最后是生成镜像包和头文件包。你也可以用binary代替,它融合了image.headers.doc.source,是最完整的包。
日期:08/14/2007 07:21:51 作者:Linuxidc
Linux下C++编译出错原因解析
Linux下C++编译出错原因解析
日期:08/14/2007 07:20:21 作者:Linuxidc
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
内容分类