下面是内核源码分析过程中遇到的问题相关文章的解释。
1. 对container_of的理解
针对内核中有关于list的特殊实现,在遍历链表各元素的时候,为了获取其成员值用到了container_of宏,上面文件是关于该宏实现的详细解释。
--------不断更新------- ......
安装Sqlite
首先是下载sqlite-3.3.8.tar.gz。
1、解压sqlite-3.3.8.tar.gz:tar –xzvf sqlite-3.3.8.tar.gz,得到sqlite-3.3.8的文件。
2、在sqlite-3.3.8同一目录下创建sqlite文件:mkdir sqlite
3、Cd sqlite
4、执行configure生成安装程序
5、 ../sqlite-3.3.8/configure --prefix=/home/work/zdw/sqlite/sqlite
6、编译并安装 make && make install
7、如果出现下列错误
8、../sqlite-3.3.8/src/tclsqlite.c: In function `DbUpdateHandler':
9、../sqlite-3.3.8/src/tclsqlite.c:333: warning: passing arg 3 of `Tcl_ListObjAppendElement' makes pointer from integer without a cast
10、 ../sqlite-3.3.8/src/tclsqlite.c: In function `tclSqlFunc':
11、 ../sqlite-3.3.8/src/tclsqlite.c:419: warning: passing arg 1 of `Tcl_NewByteArrayObj' discards qualifiers from pointer target type
12、 这个 ......
公司Linux服务器重启后,网络不能正常连接,我同事找到了解决方法,我在这里分享一下。
网络不能正常连接,是因为没有正确加载Linux网卡驱动,解决方法为:
用root用户登录系统后,依次执行如下命令
cd /lib/modules/[版本号]/kernel/drivers/net // 下面是所有网卡的驱动。这个机器的驱动是r8101.ko
insmod r8101.ko // 重新加载网卡驱动
service network restart // 重新启动/激活网络设置
网卡驱动安装正常后,就能正常连接服务器。 ......
关于epoll使用方法:
参照: http://linux.die.net/man/4/epoll
实例代码:(来自网上某论坛)
#include <pthread.h>
#include <stdio.h>
#include <sys/timeb.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/epoll.h>
#include <netinet/in.h>
#include <string.h>
#include <fcntl.h>
#include <signal.h>
#include <errno.h>
#define MAX_CLIENT 101
#define PORT 3355
#define DEBUG
int listenfd;
//设置socket连接为非阻塞模式
void nonblock(int sockfd)
{
int opts;
opts = fcntl(sockfd, F_GETFL);
if(opts < 0)
{
perror("fcntl(F_GETFL)\n");
exit(1);
}
opts = (opts | O_NONBLOCK);
if(fcntl(sockfd, F_SETFL, opts) < 0)
{
  ......
事因修改了某个配置文件,导致系统启动某个服务的时候hold住了,系统启动不起来。这种情况下常常通过修改表启动级别,切换到非xwindow模式下重新启动,一般选取启动级别runlevel为3即可。
参考环境:Redhat Enterprise Linux AS 4
步骤:
1.当Linux启动时,按 e 进去参数选择编辑界面:
2.移动光标选中系统(Red Hat Enterprise Linux AS (2.6.9-55.ELsmp)),按 e:
3.移动光标选中(kernel /vmlinuxz-2.6.9-55.ELsmp ro root=LABEL=/ rhgb quiet):
4.修改rhgb为3,然后按enter键:
5.选中(kernel /vmlinuxz-2.6.9-55.ELsmp ro root=LABEL=/ 3 quiet),按 b, 系统则进去启动程序。
注,当系统reboot时,会自动切换到xwindows启动方式的runlevel(5);
另,如果能进去系统, 或者能启动sshd服务,则通过修改/etc/inittab 文件更改runlevel。
遗憾的是暂时无法上传图片,各个步骤的截图只能搁下了~~
参考:
Runlevel System State
0 Halt the system
1 Single user mode
2 Basic multi user mode
3 Multi user mode
5 Multi user mode with GUI
6 Reboot the system ......
1. 摘要
本文阐述 Linux 中的文件系统部分,源代码来自基于 IA32 的 2.4.20 内核。总体上说 Linux
下的文件系统主要可分为三大块:一是上层的文件系统的系统调用,二是虚拟文件系统 VFS(Virtual Filesystem
Switch),三是挂载到 VFS 中的各实际文件系统,例如 ext2,jffs 等。本文侧重于通过具体的代码分析来解释 Linux 内核中
VFS 的内在机制,在这过程中会涉及到上层文件系统调用和下层实际文件系统的如何挂载。文章试图从一个比较高的角度来解释 Linux 下的 VFS
文件系统机制,所以在叙述中更侧重于整个模块的主脉络,而不拘泥于细节,同时配有若干张插图,以帮助读者理解。
相对来说,VFS
部分的代码比较繁琐复杂,希望读者在阅读完本文之后,能对 Linux 下的 VFS
整体运作机制有个清楚的理解。建议读者在阅读本文前,先尝试着自己阅读一下文件系统的源代码,以便建立起 Linux
下文件系统最基本的概念,比如至少应熟悉 super block, dentry, inode,vfsmount
等数据结构所表示的意义,这样再来阅读本文以便加深理解。
2. VFS 概述
VFS 是一种软件机制,也许称它为 Linux
的文件系统管理者更确切点,与它相关的数据结构只存在于物理内存当中。所以在每次系统 ......