自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

研读linux内核

立于山巅看内核,隐于闹市读代码

  • 博客(33)
  • 收藏
  • 关注

原创 核心游记之 setup_arch

真正的代码来了,后后 调用 setup_arch()函数进行与体系结构相关的第一个初始化工作; 对不同的体系结构来说该函数有不同的定义。对于 ARM 平台而言,该函数定义在arch/arm/kernel/Setup.c。它首先通过检测出来的处理器类型进行处理器内核的初始化,然后通过 bootmem_init()函数根据系统定义的 meminfo 结构进行内存结构的初始化,最后调用pagin

2008-10-08 17:25:00 4406 1

原创 核心游记之 page_address_init

lock_kernel()只虚晃一枪就过去了. 紧接着来的是page_address_init include/linux/mm.h   #if defined(CONFIG_HIGHMEM) && !defined(WANT_PAGE_VIRTUAL) #define HASHED_PAGE_VIRTUAL #endif 宏CONFIG_HIGHMEM 在系统中是未定义

2008-10-08 14:33:00 3790

原创 核心游记之 lock_kernel

start_kernel 开始后的第一个C 函数. include/linux/smp_lock.h中有宏定义:   #ifdef CONFIG_LOCK_KERNEL #define kernel_locked()        (current->lock_depth >= 0)   extern void __lockfunc lock_kernel(void)    __a

2008-10-08 14:01:00 3334

原创 核心游记之 printk

接下去看printk 还是宏 CONFIG_PRINTK 在s3c2410中定义了改宏   #ifdef CONFIG_PRINTK asmlinkage int vprintk(const char *fmt, va_list args)     __attribute__ ((format (printf, 1, 0))); asmlinkage int pri

2008-10-08 11:15:00 1358

原创 核心游记之 史前篇

故事开始,0~~: 内核版本:2.6.14 硬件:fs2410(s3c2410)   根据有关资料表示:内核启动之初内存状态如下:   2410的datasheet 表示,内存硬件的基址是0x3000 0000 ,内核文挡表示32K(0x8000)的空间用作存放内核页表,那么0x30008000就是2410的内核在RAM中的启动地址.     关于内核解压缩的过程分析 (此

2008-10-08 10:18:00 1090

原创 核心游记之 开篇start_kernel

启动条件(来源:网络)         通常从系统上电到执行到linux kenel这部分的任务是由boot loader来完成.         关于boot loader的内容,本文就不做过多介绍.         这里只讨论进入到linux kernel的时候的一些限制条件,这一般是boot loader在最后跳转到kernel之前要完成的:         1. C

2008-10-07 17:06:00 2796 1

原创 核心游记之 内存管理paging_init

start_kernel ()          --> setup_arch ()                    --> paging_init ()                             --> bootmem_init ()                             --> alloc_bootmem_low_pages ()    

2008-10-07 15:35:00 1251

原创 核心游记基础章 phys_to_virt

函数定义: static inline void *phys_to_virt(unsigned long x) {     return (void *)(__phys_to_virt((unsigned long)(x))); }   #define __phys_to_virt(x)    ((x) - PHYS_OFFSET + PAGE_OFFSET)   #if

2008-10-07 10:31:00 4052

原创 核心游记 之 内存初始化

2008-09-29 11:32:00 880 1

原创 核心游记之 内存管理 kmem_cache_init

系统启动函数 asmlinkage void __init start_kernel(void)。 调用 kmem_cache_init(); 看代码先....

2008-09-28 16:27:00 1101

原创 核心游记之 内存管理 kmalloc kfree

不知道从哪里开始,所以选择kmalloc . kfree先研究了!   2.6.14内核kmalloc代码如下(linux/mm/slab.h): static inline void *kmalloc(size_t size, gfp_t flags) {     if (__builtin_constant_p(size)) {         int i = 0;

2008-09-28 14:43:00 1646

原创 核心游记序言

读内核代码需要耐心,恒心,静心.

2008-09-28 11:41:00 595

原创 双城记

这是最好的时代,这是最坏的时代,这是智慧的时代,这是愚蠢的时代;这是信仰的时期,这是怀疑的时期;这是光明的季节,这是黑暗的季节;这是希望之春,这是失望之冬;人们面前有着各样事物,人们面前一无所有;人们正在直登天堂;人们正在直下地狱。

2008-09-28 03:45:00 509

转载 以太网MAC和PHY

问:如何实现单片以太网微控制器?答:诀窍是将微控制器、以太网媒体接入控制器(MAC)和物理接口收发器(PHY)整合进同一芯片,这样能去掉许多外接元器件。这种方案可使MAC和PHY实现很好的匹配,同时还可减小引脚数、缩小芯片面积。单片以太网微控制器还降低了功耗,特别是在采用掉电模式的情况下。 问:以太网MAC是什么? 答:MAC就是媒体接入控制器。以太网MAC由IEEE-802.3以太网

2008-04-29 13:52:00 1372

转载 MII 接口

MII (Media Independent Interface 介质无关接口)MII即媒体独立接口,它是IEEE-802.3定义的以太网行业标准。它包括一个数据接口,以及一个MAC和PHY之间的管理接口(图1)。数据接口包 括分别用于发送器和接收器的两条独立信道。每条信道都有自己的数据、时钟和控制信号。MII数据接口总共需要16个信号。管理接口是个双信号接口:一个是 时钟信号,另一个是数据信号。

2008-04-29 13:50:00 2458

转载 网卡知识(MAC 层 PHY层)

以太网媒体接入控制器(MAC)物理接口收发器(PHY) 以太网接口可分为协议层和物理层。 协议层是由一个叫MAC(Media Access Layer,媒体访问层)控制器的单一模块实现。 物理层由两部分组成,即PHY(Physical Layer,物理层)和传输器。 常见的网卡芯片都是把MAC和PHY集成在一个芯片中,但目前很多主板的南桥芯片已包含了以太网MAC控制功能,只是未提供物理层接

2008-04-29 12:09:00 7334 1

原创 usb子系统计划

usb子系统包括三个部分,分别是:usb设备驱动、usb核心驱动、usb控制器驱动 usb设备:块传输----u盘(scsi驱动,块设备驱动)、                                     usb网卡(网络驱动)、usb无线网卡、                                    usb蓝牙、                   等时

2008-01-23 19:27:00 659

转载 视频与图像RGB/YUV格式详解

计算机彩色显示器显示色彩的原理与彩色电视机一样,都是采用R(Red)、G(Green)、B(Blue)相加混色的原理:通过发射出三种不同强度的电子束,使屏幕内侧覆盖的红、绿、蓝磷光材料发光而产生色彩。 这种色彩的表示方法称为RGB色彩空间表示(它也是多媒体计算机技术中用得最多的一种色彩空间表示方法)。        根据三基色原理,任意一种色光F都可以用不同分量的R、G、B三色相加混合而成。

2007-04-25 14:41:00 766

原创 进程间通信(IPC)

 共享内存、消息队列和信号量集等都是经典的UNIX进程间通讯(IPC)机制。这些机制允许不相关的进行通过一种合理有效的途径来交换信息,这些机制用键(key)来标识、创建或访问相应的实体。创建这些实体的进程寿命结束之后,这些实体仍然可能存在于系统之中,POSIX:XSI也提供了列举和删除这些实体的命令。目标:学习经典的进程间通信研究同步的共享内存实验研究信号量的实现为

2007-03-23 15:03:00 2875 2

转载 面试、笔试题

  面试、笔试题 http://www.cnitblog.com/zouzheng/category/4671.html

2007-03-20 22:44:00 688

转载 linxu到arm

 编写Linux应用程序要用到如下工具:   (1)编译器:GCC   GCC是Linux平台下最重要的开发工具,它是GNU的C和C++编译器,其基本用法为:gcc [options] [filenames]。   我们应该使用arm-linux-gcc。   (2)调试器:GDB   gdb是一个用来调试C和C++程序的强力调试器,我们能通过

2007-03-20 22:26:00 523

转载 一步一步建立基于ARM+Linux的cross toolchain

 声明:本文在参考网上资料的基础上,以梁元恩的《如何为嵌入式开发建立交叉编译环境》为蓝本修改而成。对于自己在建立过程中遇到的问题进行了详细的说明,本文随自己学习的深入会进行相应的更新。1 引言由于一般嵌入式开发系统存储容量有限,在裁减和定制Linux,运用于嵌入式系统前,通常需要在PC机上建立一个用于目标机的交叉编译环境,也就是将各种二进制工具程序集成为工具链,其中包括如GNU的链接器

2007-03-19 20:37:00 1705

转载 致 ARM 初学者

  1.做个最小系统板:如果你从没有做过ARM的开发,建议你一开始不要贪大求全,把所有的应用都做好,因为ARM的启动方式和dsp或单片机有所不同,往往会遇到各种问题,所以建议先布一个仅有Flash,SRAM或SDRAM、CPU、JTAG、和复位信号的小系统板,留出扩展接口。使最小系统能够正常运行,你的任务就完成了一半,好在ARM的外围接口基本都是标准接口,如果你已有这些硬件的布线经验,这对你来

2007-03-19 20:10:00 906

原创 信号量和临界区

 学习目标:学习信号量及其属性进行同步实验研究临界区的行为使用POSIX命名信号量和无名信号量理解信号量的管理1. 临界区临界区是指必须以互斥的方式执行的代码段,也就是说临界区范围内只能由一个活动的线程。例如:修改共享变量的过程中其他的执行线程可能会访问共享变量,那么修改共享变量的代码就被看成是临界区的一部分。临界区问题指用安全、公平和对称的方式来执行临界区代码

2007-03-19 15:46:00 8507

原创 线程同步

 2.线程同步POSIX支持用于短期锁定的互斥锁以及可以等待无限期限的条件变量。在线程化程序中进行信号处理格外复杂,但是用专用线程来取代信号处理程序,可以降低其复杂性。学习目标:互斥锁、条件变量、读--写锁、经典同步问题、带信号的线程 2.1POSIX同步函数 描    述

2007-03-16 15:53:00 2303

原创 线程模型

 1. 线程管理线程和函数调用很类似:都与主程序(主线程)共享同样的存储空间;变量的使用范围也一样---线程和函数都只能调用自己函数体内定义的变量和全局变量;差别是线程的执行和调用线程的执行是并行(异步)的,而函数和调用函数的执行是串行的,所以要注意同步和互斥;线程在传递参数和结果返回上有自己的接口。 线程函数,如果成功都返回0,如果不成功,都会返回非零的错误码。他们不

2007-03-07 11:19:00 1531

转载 让你快乐的十九种习惯

美国一家调查机构在全世界 22个国家调查人们的快乐水平,结果显示,美国人的快乐水平最高,有46%的美国人对自己的生活感到快乐,其次是印度,37% 的印度人乐呵呵地生活着,而中国人的快乐水平最低,位列榜尾,只有 9%的中国人觉得自己活得快乐。美国畅销书籍«如何快乐»的作者,心理学博士凯伦 ·撒尔玛索恩女士说:" 我们的生活有太多不确定的因素,你随时可能会被突如其来的变化扰乱心

2007-03-01 09:28:00 572

原创 守护进程

 守护进程

2007-02-16 13:08:00 567

原创 1.套接口地址结构

1.1 IPv4 套接口地址结构       #include        struct  in_addr       {          in_addr_t     s_addr ;                 //32位的IPv4地址,按网络字节序       };             struct sockaddr_in       {    

2007-02-15 21:40:00 1096

原创 监控系统

项目目标: 通过实践,掌握规模在中型的系统开发能力,同时也实践一下LINUX下的综合开发能力和开源码能力项目开始时间:2007.3.1项目简介: 通过USB摄象头进行视频数据采集-->编码-->传输-->解码-->保存(播放) 

2007-02-09 10:47:00 596

原创 小型FTP项目

项   目 目   标: 熟悉SOCKET开发,锻炼 运用协议开发相关项目的能力,读RFC文档的能力项目开始时间: 2007.3.1

2007-02-09 10:37:00 671

原创 新的开始

昨天辞职了.决心自己创业------不是创办企业,而是开创自己的事业.这个公司是我毕业后的第一个雇主,我工作三年,来时身无分文,去时也空空.我不能再这样混下去了,要么适应生活,要么下决心改变生活 新生活已经开始,.....................

2007-02-09 10:11:00 498

原创 2.套接口编程相关的辅助函数

2.1 字节排序问题考虑一个16位整数,他由2个字节组成。内存中存储这两个字节有两中方法:一.将低序字节存储在起始地址,这称为小端字节序(网络字节序)。二.将高序字节存储在起始地址,这称为大端字节序(主机字节序)。 2.2 字节排序函数h 代表host, n 代表 network, L 代表long(32位如Ipv4地址), s 代表 short(16位如TCP或者UDP端

2007-02-08 23:43:00 644

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除