自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

z41013774的专栏

每天进步一点点。

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

原创 2440init代码分析(5)

626 627 ;===========================================================628 629 LTORG630 631 ;GCS0->SST39VF1601632 ;GCS1->16c550633 ;GCS2->IDE634 ;GCS3->CS8900635 ;GCS4->DM9000636 ;GC

2013-10-05 10:04:58 764

原创 2440init代码分析(4)

310 ;===========================================================311 312 ldr r0, =BWSCON313 ldr r0, [r0]314 ands r0, r0, #6 ;OM[1:0] != 0, NOR FLash boot315 bne copy_proc_beg ;do not r

2013-10-05 09:54:02 894

原创 2440init代码分析(3)

160 ;=======161 ; ENTRY162 ;=======163 ResetHandler164 ldr r0,=WTCON ;watch dog disable165 ldr r1,=0x0166 str r1,[r0]167 第164-166行watchdog也是个定时器,一般是用来监控系统有没有”跑飞”,正常情况下watchdog

2013-10-05 09:09:32 820

原创 2440init代码分析(2)

064        IMPORT  |Image$$RO$$Base|    ; Base of ROM code065        IMPORT  |Image$$RO$$Limit|  ; End of ROM code (=start of ROM data)066        IMPORT  |Image$$RW$$Base|   ; Base of RAM to i

2013-10-04 20:49:10 838

原创 2440init代码分析(1)

;========================================= ; NAME: 2440INIT.S ; DESC: C start up codes ;       Configure memory, ISR ,stacks ;    Initialize C-variables ; HISTORY: ; 2002.02.25:kwtark: ver

2013-10-04 18:58:16 733

原创 U-BOOT启动流程之四

(5) main_loop()函数在这个函数前也有许多其它的函数,也是一些初始化的信息,不一一介绍.在main_loop函数中会有与用户进行交互,如果在默认情况下,会等待3秒,如果你设置了,在mini2440.h中可以配置为0,也就是不延迟,直接启动kernel.如果你跟踪代码的话,会经过这么一引动步骤,从parse_string_outer->parse_stream_outer->run_

2012-04-16 20:20:41 1174

原创 U-BOOT启动流程之三

U-boot启动的第二部分在u-boot的第二部分当中,主要初始化一些与硬件相关的信息,比如串口,LCD,flash,timer等.当然这些硬件是根据自己的需要来初始化的,比如我不需要使用MMC,这个我们就不需初始化了.基本图示如下从这个图中,可以看出第二部分的执行流程,里面的函数也比较多,不一一介绍,自己可以找一些感兴趣的函数看一下.同时注意一下,gd这个指针很重要,同时要关注一

2012-04-16 20:17:45 572

原创 U-BOOT启动流程之二

(3)关闭cache,mmu,初始化SDRAM存储控制器#ifndef CONFIG_SKIP_LOWLEVEL_INIT bl cpu_init_crit #endif.当我们把u-boot下载到内存当中时,就可以不用再使用这个函数.118 #ifndef CONFIG_SKIP_LOWLEVEL_INIT119 cpu_init_crit:1

2012-04-16 20:15:30 520

原创 U-BOOT启动流程之一

U-boot的启动流程版本 V1.0u-boot的作用主要是初始化一部分硬件,设置堆栈,然后把U-boot的第二部分代码搬运到内存当中运行.U-BOOT的启动分为两个部分.第一部分(1)   初始化一部分硬件,比如关闭watch dog,中断等(2)   搬运u-boot的第二部分代码到sdram中(3)   设置堆栈sp(4)   跳到第二部分代码开始执行

2012-04-16 20:10:40 664

原创 EXT2目录文件索引节点的操作方法

const struct inode_operations ext2_dir_inode_operations = { .create  = ext2_create, .lookup  = ext2_lookup, .link  = ext2_link, .unlink  = ext2_unlink, .symlink = ext2_symlink, .mkdir  = e

2011-11-19 19:38:47 1910

原创 EXT2普通文件节点的操作方法

const struct inode_operations ext2_file_inode_operations = { .truncate = ext2_truncate,#ifdef CONFIG_EXT2_FS_XATTR .setxattr = generic_setxattr, .getxattr = generic_getxattr, .listxattr = ex

2011-11-19 19:37:26 1307

原创 EXT2的文件操作方法

const struct file_operations ext2_file_operations = { .llseek  = generic_file_llseek, .read  = do_sync_read, .write  = do_sync_write, .aio_read = generic_file_aio_read, .aio_write = generic_

2011-11-19 19:34:47 1282

原创 ext2文件系统的super操作方法

static const struct super_operations ext2_sops = { .alloc_inode = ext2_alloc_inode, .destroy_inode = ext2_destroy_inode, .write_inode = ext2_write_inode, .delete_inode = ext2_delete_inode, .

2011-11-19 19:32:42 899

原创 EXT2文件系统超级块的初始化(二)

=======================================struct inode *ext2_iget (struct super_block *sb, unsigned long ino){001 struct ext2_inode_info *ei;002 struct buffer_head * bh;003 struct ext2_inode *r

2011-11-19 19:31:15 920

原创 EXT2超级块初始化(一)

====================================static int ext2_get_sb(struct file_system_type *fs_type, int flags, const char *dev_name, void *data, struct vfsmount *mnt){ return get_sb_bdev(fs_type, fla

2011-11-19 19:30:10 3091

原创 挂载EXT2文件系统

文件系统的安装主要是通用mount命令来实现的,然后通过系统调用由用户态进入到内核态,把某一个分区下的文件系统挂载到某一个目录下,当然挂载也可以能指定挂载的文件系统。mount函数通过sys_mount函数来实现,其具体函数如下asmlinkage long sys_mount(char __user *dev_name, char __user *dir_name,    char __

2011-11-19 19:27:39 3312

原创 EXT2的磁盘数据结构

Ext2分区当中第一个块是引导块,其余部分分成块组,每个块组分布如下图。Ext2文件系统中所有块组大小相同并被顺序存放,因此,内核可以从块组的整数索引中得到磁盘中一个块组的位置。内核尽可能地把属于一个文件的数据块存放在同一块组中,所以块组减少了文件的碎片。超级块与组描述符被复制到每个块组中。只有块组0中所包含的超级块和组描述符才由内核使用,是其余的超级块和组描述符保持不变,一个分区有多少块

2011-11-19 19:17:27 1431

原创 块设备驱动层

这一章不准备介绍太多,以后还会补充,主要介绍一下块设备驱动的大致流程。一、 磁盘和磁盘分区的表示磁盘是一个由通用块层处理的逻辑块设备。通常一个磁盘对应一个硬件块设备,如硬盘,软盘或光盘。磁盘是由gendisk对象描述。struct gendisk {01 int major; 02 int first_minor;03 int minors;

2011-10-30 14:27:25 1108

原创 IO调度层

一、 IO调度的两个重要的数据结构request_queue数据结构如下struct request_queue{01 struct list_head queue_head;02 struct request *last_merge;03 struct elevator_queue *elevator;04 struct request_list rq;0506

2011-10-30 14:21:05 959

原创 通用块层

通用块层是一个内核组件,处理来自系统中的所有块设备发出的请求,接着上一层,处理提交过来的缓存区头。如果上一章address_space是关键的数据结构,这一章是bio和bio_vec,这两个数据结构一、 两个重要的数据结构struct bio {01 sector_t bi_sector; 02 struct bio *bi_next; /* request queue lin

2011-10-30 14:19:19 1335

原创 页高速缓存(二)

五. 把块放在页高速缓存中在旧的Linux内核版本中,有两种不同的磁盘高速缓存,分别是页高速缓存和缓冲区高速缓存,前者用来存放访问磁盘文件内容时生成的磁盘数据页,后者把通过VFS访问的块的内容保留在内存中。从2.4.10版本开始,缓冲区高速缓存不存在了,把它们存放在叫做”缓冲区页”的专门页中,页缓冲区页保存在页高速缓冲中。缓冲区页在形式上就是与称做”缓冲区首部”的附加描述符相关的数据页,主要目

2011-10-30 14:15:36 1293

原创 页高速缓存(一)

一、 页高速缓存页高速缓存是Linux内核使用的主要磁盘高速缓存。在大多数情况下,内核在读写磁盘的时候都会引用页高速缓存。如果页不在高速缓存中,新的页就会回到高速缓存中,然后从磁盘中读出数据来填充它。如果内存有足够的空闲空间,会让该页长期保留在高速缓存中,以提高访问磁盘的速度。同样,把数据写到磁盘上也是一样的,如果该数据对应的页在高速缓存中,就可以直接写回磁盘,如果不在,就增加新页,然后写

2011-10-30 14:12:01 2110

原创 块设备的基本概述

什么是块设备,块设备将信息存储在固定大小的块中,每个块都有自己的地址。数据块的大小通常在512字节到32768字节之间。块设备的基本特征是每个块都能独立于其它块而读写。块设备驱动程序的调用,可以由上往下分为下面几层。也就是从上层的应用中的读写函数如何到磁盘中的数据,可以这样分,也就是函数调用的步骤。 第一层VFS部分,在VFS文件系统中给出了一些分析。第二层的具体的文件系统

2011-10-30 14:08:49 1359

原创 sysfs之platform总线初始化简单分析

int __init platform_bus_init(void){01 int error;0203 early_platform_cleanup();0405 error = device_register(&platform_bus);06 if (error)07 return error;08 error = bus_register(&plat

2011-10-23 15:10:03 962

原创 sys之device初始化简单

01int __init devices_init(void)02{03 devices_kset = kset_create_and_add("devices", &device_uevent_ops, NULL);04 if (!devices_kset)05 return -ENOMEM;06 dev_kobj = kobject_create_and_add("dev

2011-10-23 10:03:00 1253

原创 sysfs 文件系统简单分析

01int __init sysfs_init(void)02{03 int err = -ENOMEM;0405 sysfs_dir_cachep = kmem_cache_create("sysfs_dir_cache",06 sizeof(struct sysfs_dirent),07 0, 0, NULL);08 if (

2011-10-22 19:26:50 1011

原创 linux 驱动模型的数据结构

sysfs文件系统sysfs文件系统是一种特殊的文件系统,在系统启动时,被安装在/sys目录,目标主要是展现设备驱动程序模型组件间的层次关系。所包含的目录如下:block 块设备,它们独立于所连接的总线devices 所有被内核识别的硬件设备,都挂在它们的总线上。bus 系统中大部分设备,依靠总线进行连接drivers 注册过的设备驱动程序class 系

2011-10-19 21:55:11 724

原创 rootfs文件系统的简单分析

rootfs文件系统是基于内存的文件系统,也是虚拟的文件系统,在系统启动之后,隐藏在真正的根文件系统后面,不能被卸载。在开始介绍rootfs之前,先介绍一下,rootfs的数据结构,然后再看一下rootfs中的函数rootfs_get_sb是怎么调用的。rootfs的数据结构如下1static struct file_system_type rootfs_fs_type = {2

2011-10-19 07:53:11 6009 2

原创 linux 内核的启动构架

内核为2.6.30.4,平台为S3C2440,友善之臂。内核的启动代码,但一般情况下,是两部分,为了容易理解,可以这样分成三部分。内核启动的第一部分,内核启动的位置在0x30008000,0x30001000存放标记列表,有可以标记列表不只一个,在0x30004000-0

2011-10-18 07:34:33 924

原创 linux 启动之setup_arch函数(二)

01static void __init alloc_init_section(pgd_t *pgd, unsigned long addr,02 unsigned long end, unsigned long phys,03 const struct mem_type *type)04{05 pmd_t *pmd = pmd_offset(p

2011-10-18 07:20:34 836

原创 linux 启动之setup_arch函数(一)

01void __init setup_arch(char **cmdline_p)02{03 struct tag *tags = (struct tag *)&init_tags;04 struct machine_desc *mdesc;05 char *from = default_command_line;0607 unwind_init();0809 s

2011-10-18 07:17:12 1059

原创 linux 根文件系统挂载分析(二)

第三部分解压initramfs文件系统中的内容到rootfs01static int __init populate_rootfs(void)02{03 char *err = unpack_to_rootfs(__initramfs_start,04 __initramfs_end - __initramfs_start);05 if (err)06 pani

2011-10-17 23:32:42 1179

原创 linux 根文件系统的挂载分析(一)

在介绍根文件系统挂载之前先介绍一些基础知识initramfs当linux内核启动后,会找到并执行第一个用户程序,一般是init。这个程序存在于文件系统当中,文件系统存在于设备上,但不知道init存在哪个设备上,于是有了内核命令列选项root=,用来指定root文件系统存在于哪个设备上。然后由于后来的设备类型越来越来多,比如可能在scsi,sata,flash这些设备,还有的存在于网络设

2011-10-17 23:28:26 1003 1

原创 linux VFS数据结构(二)

目录项对象存放目录项与对应文件进行链接的有关信息。每个磁盘文件系统都以自己特有的方式将该类信息存在磁盘上。VFS把目录项当作目录文件来对待,路径中的每个组成部分有一个索引结点表示,虽然它们可以由索引结点表示,但VFS经常需要执行目录相关操作,比如路径的查找等。为了查找方便,VFS引入了目录项这个概念,每个目录项代表路径中一个特定部分。01struct dentry {02 atom

2011-10-17 23:25:48 624

原创 linux VFS数据结构(一)

VFS的数据结构超级块对象记录已安装文件系统的整体信息,由于具体的文件系统来实现,它对应于具体文件系统的超级块或控制块,存储在磁盘的特定扇区上,如果不是基于磁盘的文件系统,比如sysfs,会生成临时的超级块,保存在内存当中。01struct super_block {02 struct list_head s_list; /* Keep this first */03 dev

2011-10-17 23:20:01 592

空空如也

空空如也

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

TA关注的人

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