红联Linux门户

Linux帮助
  • Linux内核(v0.11)-从开机加电执行到main函数前

    2014-12-03 - 这一段时间分三步完成 1,启动BIOS,准备实模式下的中断向量表和中断服务程序。 2,加载操作系统到内存。用步骤1中准备的中断服务程序实现。 3,为执行main函数做过渡工作。 一,启动BIOS 靠硬件方法来启动BIOS,BIOS程序入口地址0xFFFF0。加电瞬间强行将CS...

  • i2c--2.6.34文档:如何枚举产生i2c_client

    2014-12-03 - 根据自己的理解翻译了http://lxr.linux.no/linux+v2.6.34/Documentation/i2c/instantiating-devices中关于枚举建立i2c_client的文档。有异议或疑问请参照原文,毕竟内核的文档才是真正的精华。 方法1:使用总线号声明设备。 在内核的初始化中定义设备的信息...

  • Linux下实现USB口的热插拔

    2014-12-03 - 目前要做一个在嵌入式平台上的USB口的热插拔事件。 经过我现在的分析总结目前有如下方法: 1,定时检查/proc/scsi/scsi文件 此方法只能在PC上,但在嵌入式平台上不可用。 2,netlink方式 使用netlink. #include stdio.h #include stdlib.h #include string.h...

  • 制作KVM-Qemu调试平台的步骤

    2014-12-03 - 制作KVM-qemu调试平台的步骤: 1.解压缩新版kvm:tar -xzvf qemu-kvm-0.13.0.tar.gz 2.解决依赖sudo apt-get build-dep qemu-kvm 3.配置安装路径:./configureprefix=/usr/local/kvm make sudo make install 4.安装好后,加载模块 sudo modprobe kvm sudo modpr...

  • Linux kernel 2.6.34:i2c驱动如何编写

    2014-12-03 - 2.6.34的i2c子系统基本不再区分legacy model和standard drivermodel的驱动了,现在可以说只有一种。 现在i2c设备驱动的编写方式可以分为两大类(我自己分的,不是权威分法),一类是不注册i2c_driver。 因为和i2c设备的通信不需要i2c_driver,这仅仅是一个辅...

  • kgdb+Qemu-KVM调试环境建立方法和所需的相关文件

    2014-12-03 - 下面描述kgdb调试环境的建立。其中所需要的配置文件good_config在这个网页中也可以找到。可以按照网页中给定的方法手动配置内核配置文件。 --------------------裁减步骤--------------------------------- Kernelhacking ---: 选中Collectscheduler debugg...

  • Linux中套接口socket,bind函数测试,bzero警告解决方法

    2014-12-03 - #include errno.h #include netdb.h #include netinet/in.h #include arpa/inet.h #include string.h main() { int nSocket; struct sockaddr_in sin; //struct sockaddr_in *p = sin; nSocket = socket(PF_INET,SOCK_STREAM,0); bzero(sin,sizeof(struct so...

  • Linux-2.6.30内核配置版本5(版本4增加KGDB)

    2014-12-03 - --------------------裁减步骤--------------------------------- Kernel hacking ---: 选中 Collect scheduler debugging info 选中 Compile the kernel with debug info 去除 Write protect kernel read-only data structures 选中 Kernel hacking --- KG...

  • Qemu kgdb调试内核

    2014-12-03 - 1,编译内核 按 linux-2.6.30 内核配置 版本5 编译内核 2,用Qemu 启动Linux /usr/local/qemu/bin/qemu -kernel ./linux-2.6.30/arch/i386/boot/bzImage -hda ./1248179541.img -boot c -append root=/dev/sda kgdboc=ttyS0,115200 kgdbwait -net nic,vlan=0...

  • Linux驱动程序设计环境搭建

    2014-12-03 - 编写驱动程序时,需要内核源码树的支持。内核源码树时从内核源代码编译得到的。下面开始构造内核源代码的步骤。以Ubuntu为例子。 1. 下载内源代码,位置www.kernel.org. (注意:源码树内核的版本要和驱动程序运行的目标平台的内核版本一致) apt-cache search...

  • Linux下Daemon的实现

    2014-12-03 - 注:Linux下可以直接调用damon函数来实现daemon进程,没必要重新实现,理解其原理即可。 在Linux中专门提供了一个函数来完成这个daemon化的过程,这个函数的原型如下 int daemon (int __nochdir, int __noclose); 如果__nochdir的值为0,则将切换工作目录为...

  • Linux Makefile中的:=, =, ?=的区别

    2014-12-03 - := 是立即变量赋值,在定义时值已经被确定 = 是延时变量赋值,只有在这个变量被使用时才展开,$(VAR)就是一种被使用 例 VAR_A=abcd VAR_B=$(VAR_A) VAR_C:=$(VAR_A) VAR_A=cdef 此时,$(VAR_B) 为 cdef (跟随VAR_A变化)。 $(VAR_C) 为 abcd (不随VAR_A变...

  • Linux内核中的常用宏container_of其实很简单

    2014-12-02 - 开发平台:Ubuntu11.04 编译器:gcc version 4.5.2 (Ubuntu/Linaro4.5.2-8ubuntu4) Container_of在Linux内核中是一个常用的宏,用于从包含在某个结构中的指针获得结构本身的指针,通俗地讲就是通过结构体变量中某个成员的首地址进而获得整个结构体变量的首地...

  • Eclipse中设置${user}变量

    2014-12-02 - 在使用Eclipse编写Java代码时,自动生成的注释信息都是默认是使用的当前登录系统用户名: /** * @author administrator */ 如果我们想修改成我们自己的名字怎么办呢? 以下介绍的三种方法也可以应用在MyEclipse中 方法一. 修改Eclipse 启动参数 在Eclipse启动...

  • Linux Shell高级技巧(一)

    2014-12-02 - 该系列将重点介绍Linux Shell中的高级使用技巧,其主要面向有一定经验的Shell开发者、Linux系统管理员,以及Linux的爱好者。博客中的示例主要来源于网络和一些经典书籍,在经过本人的收集和整理之后,以系列博客的形式呈现给诸位。如果大家有更多更好的Shell...

  • ARM-Linux内核移植

    2014-12-01 - 内核版本:2.6.22,为什么要采用这样一个较低的版本进行移植了,因为韦东山大牛说了,低版本的才能学到东西,越是高版本需要移植时做的工作量越少,学的东西越少。 内核启动分为三个阶段,第一是运行head.S文件和head-common.S,第三个阶段是允许第二是运行m...

  • CentOS 6系统优化init脚本

    2014-12-01 - CentOS 已经发布了6.2版了,现在已经可以用在生产环境了,新版本的内核也能更好的利用硬件。 写了一个脚本,用来初始化系统环境,现在分享出来,你可以根据自己的需要,对脚本进行相应的修改。 脚本的内容如下: #!/bin/bash #author suzezhi #this script i...

  • 不要盲目增加ip_conntrack_max-理解Linux内核内存

    2014-12-01 - 1.由ip_conntrack引出的Linux内存映射 有很多文章在讨论关于ip_conntrack表爆满之后丢弃数据包的问题,对此研究深入一些的知道Linux有个内核参数ip_conntrack_max,在拥有较大内存的机器中默认65536,于是疯狂的增加这个参数,比如设置成1000000,只要不报设...

  • Linux内核分析之进程地址空间

    2014-12-01 - 本文主要介绍linux内核中进程地址空间的数据结构描述,包括mm_struct/vm_area_struct。进程线性地址区间的分配流程,并对相应的源代码做了注释。 内核中的函数以相当直接了当的方式获得动态内存。当给用户态进程分配内存时,情况完全不同了。进程对动态内存...

  • Linux内核之进程调度

    2014-12-01 - 等待队列 Sleep相关函数将进程的状态设置为非运行态,在下一次调度来时,将在schedule函数中将本进程从运行队列中移除。sleep函数将进程加入等待队列,然后调用schedule函数选择并重新开始另一个程序的执行。当调用wake_up类函数将进程唤醒时,wake_up类函数...

  • Linux内核分析之工作队列

    2014-12-01 - 可延迟函数和工作队列非常相似,但是他们的区别还是很大的。主要区别在于:可延迟函数运行在中断上下文中,而工作队列中的函数运行在进程上下文中。在中断上下文中不可能发生进程切换。可延迟函数和工作队列中的函数都不能访问进程的用户态地址空间。 涉及数...

  • Linux内核分析之缺页中断

    2014-12-01 - Linux缺页异常程序必须能够区分由编程引起的异常以及由引用属于进程地址空间但还尚未分配物理页框的页所引起的异常。在x86-ia32体系上由do_page_fault函数处理,每个版本有所差异,现分析的版本为2.6.32 /* regs:该结构包含当异常发生时的微处理器寄存器的值...

  • Linux内核分析之软定时器笔记

    2014-12-01 - 定时器是一种软件功能,即允许在将来的某个时刻,函数在给定的时间间隔用完时被调用。超时表示与定时器相关的时间间隔已经用完的那个时刻。 linux上考虑两种类型的定时器,即动态定时和间隔定时器。第一种类型由内核使用,而间隔定时器由进程在用户态创建。...

  • Linux中断延迟之tasklet

    2014-12-01 - tasklet是I/O驱动程序中实现可延迟函数的首选方法。从下面的内核代码的分析中我们会看到,tasklet建立在两个叫做HI_SOFTIRQ和TASKLET_SOFTIRQ的软中断之上。几个tasklet可以与同一个软中断相关联,每个tasklet执行自己的函数。tasklet和高优先级的tasklet分...

  • Linux内核分析之系统调用

    2014-12-01 - 在内核入口函数start_kernel中调用trap_init实现系统调用的初始化工作 void __init trap_init(void) { ... set_system_trap_gate(SYSCALL_VECTOR, system_call); .... } 也就是IDT中0x80用来实现系统调用,实现系统调用的函数为system_call,为汇编实现 ENTR...

  • Linux下GCC的DEBUG和优化,以及编译过程

    2014-12-01 - 第一:DEBUG实例 [root@localhost debug]# vim null.c int a(int *p); int main(void) { int* p = 0; return a(p); } int a(int *p) { int y = *p; return y; } ~ [root@localhost debug]# ulimit -c unlimited [root@localhost debug]# gcc -Wall g null.c...

  • Linux下GCC的于处理器CPP使用实例

    2014-12-01 - [root@localhost ansi]# cpp -dM /dev/null //查看GCC内部自定义的宏 第一:通过使用宏去掉注释 [root@localhost ansi]# vim dtest.c #include stdio.h int main(void) { #ifdef TEST printf(Test mode\n); #endif printf(Tuning......\n); return 0; } 1、...

  • Linux下GCC程序优化工具gprof和gcov实例

    2014-12-01 - 第一:gprof工具 gprof工具是通过在执行的过程中往可执行文件中加入特殊的代码,随着可执行程序的运行而运行,从而记录执行情况,通过这个工具可以检测某个函数调用的次数和时间,这样的话就可以集中优化那个调用最为频繁的函数,来实现程序的优化。 这里是...

  • 简述编译Linux 3.0内核的方法

    2014-12-01 - 有时候可能需要自己编译 Linux 内核,下面简单讲述编译 Linux Kernel 3.0 的一般方法(在 Fedora 和 Ubuntu Linux 发行版上测试通过)。作为示例,下面使用的是 3.0 RC4 版内核 (update: 2011-8-19 这篇文章是从我旧 blog 搬过来的,整理此文时 3.1-RC2 版...

  • CentOS 6系统优化Shell脚本

    2014-12-01 - CentOS 已经发布了6.2版了,现在已经可以用在生产环境了,新版本的内核也能更好的利用硬件。写了一个脚本,用来初始化系统环境,现在分享出来,你可以根据自己的需要,对脚本进行相应的修改。 脚本的内容如下: #!/bin/bash #author suzezhi #this script is...

  • Linux下运用MMAP在进程间通信

    2014-12-01 - 由于在操作系统层面,各个进程所看到的虚拟地址空间是独立的,之间没有交集。因此需要通过中间一个关联将多个关联进程的不同虚拟地址映射到相同的物理地址空间中。 MMAP 就是这么一个功能,它把一个文件(也就是在内存中的物理地址空间确定)映射到不同进程...

  • 有关Linux时间函数的总结

    2014-11-30 - 首先搞清楚两个概念: 1、日历时间(Calendar Time)是通过time_t数据类型来表示的,用time_t表示的时间(日历时间)是从一个时间点(例如:1970年1月1日0时0分0秒)到此时的秒数。在time.h中,我们也可以看到time_t是一个长整型数。 2、在标准C/C++中,我们...

  • Linux Tmpfs源码分析

    2014-11-30 - Tmpfs是linux 系统中基于内存/交换分区作的文件系统,与ramdisk不同的是,ramdisk是作为块设备,基于ext的文件系统,所以不可绕过的是page cache的内存复制,具体可以参考前面写的关于ramdisk, 对tmpfs来说就是直接操作内存做为文件系统的,而不是基于块设备...

  • Linux+page+cache+里的几个函数的源码分析

    2014-11-30 - page cache 在linux vfs 中是比较重要的一层,其功能就不详细介绍了。主要介绍了几个关键性函数,容易帮助了解page cache里的整体逻辑和流程。 先看一下page 的结构体 /* * Each physical page in the system has a struct page associated with * it to kee...

  • Linux RAMDisk源码分析

    2014-11-30 - 在产品中使用了ramdisk, 看了一部分的源码,分析和共享一下。内核源码2.6.18。 安装ramdisk ramdisk 在linux里面被认为是个内存的块设备,通常以rm0,rm1... 挂在dev下,首先需要格式化块设备成linux的文件系统,然后在将想使用的目录mount 到dev/rm0...下,这...

  • Linux 2.6如何使用时间中断来完成进程调度

    2014-11-30 - 进程调度: Linux里的进程管理调度,如何调度使用不同的进程占用不同的时间片段,主要在核心函数 scheduler_tick (kernel/sched.c) 硬中断触发: 对操作系统来说,中断是一种电信号,由硬件设备产生,并直接送入中断控制器(如8259A)的输入引脚上,然后再...

  • Linux Direct IO写文件的问题

    2014-11-30 - 很多的时候,在应用层中会做一些文件的cache ,那么绕开linux vfs提高读写文件的性能就显的比较重要,由于Direct IO 中操作文件有buffer地址和大小页对齐,那么在copy file 的时候,用direct IO,就会碰到如果文件大小不是页的整数倍的时候,最后一块 block是...

  • Linux proc的文件系统的源码分析

    2014-11-30 - proc 的文件系统是linux 里面常用的基于内存的文件系统。linux的内核版本2.6.18。 重要的struct: struct proc_dir_entry { unsigned int low_ino; unsigned short namelen; const char *name; mode_t mode; nlink_t nlink; uid_t uid; gid_t gid; loff_t siz...

  • Linux内存管理之slab机制(释放对象)

    2014-11-30 - Linux内核中将对象释放到slab中上层所用函数为kfree()或kmem_cache_free()。两个函数都会调用__cache_free()函数。 代码执行流程: 1,当本地CPU cache中空闲对象数小于规定上限时,只需将对象放入本地CPU cache中; 2,当local cache中对象过多(大于等于规...

  • Linux内存管理之slab机制(销毁slab)

    2014-11-30 - 总结完了slab创建、对象分配、对象释放,在这里再看看slab的销毁。销毁slab很简单,由函数slab_destroy()实现。 /** * slab_destroy - destroy and release all objects in a slab * @cachep: cache pointer being destroyed * @slabp: slab pointer being d...