linux内核
小索
杂,乱
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
浅析硬件中断(mips)
注:图片取自:http://blog.chinaunix.net/uid-23769728-id-3079164.html先简单介绍一下硬件中断的软件流程:handle_int ->plat_irq_dispatch->malta_hw0_irqdispatch->do_IRQ(irq)->generic_handle_irq -> __do_IRQ() -> irq_exi原创 2012-09-05 17:20:54 · 4210 阅读 · 0 评论 -
一步一步粗谈linux文件系统(六)----ramfs的读、写
ramdisk的文件有有点,文件读取、写很快,but缺点也很明显,restart后就数据全没了。ramfs的read过程ramfs系统中write过程浅析在ramfs中,文件生成,其实就是mknod的一个过程,只不过普通文件,不需要设备号一场由mknod引发的扯淡不管是读、写还是生成,其实理清了inode跟dentry,就是革命道路上的一大步。最最简单的理解原创 2012-12-17 22:36:06 · 1355 阅读 · 0 评论 -
jffs2文件系统——概述
jffs2文件系统一般应用于闪存设备,且存储空间不能太大(实际应用中很少用于超过128M的存储设备),且挂载时间长,因为在挂载的过程中会去扫描整个物理介质(flash),在最新的jffs2加入了摘要(summary)机制,这摘要写在擦出块的最后面(nor flash的话,擦除块可以理解成一个扇区),挂载的时候只读摘要信息,这样避免了大规模的扫描整个擦出块。 其大致原理是这样的:将fl原创 2013-01-03 19:43:33 · 2571 阅读 · 0 评论 -
一步一步粗谈linux文件系统(七)----sysfs概述
Sysfs 是 Linux 2.6所提供的一种虚拟文件系统。这个文件系统不仅可以把设备(devices)和驱动程序(drivers) 的信息从内核输出到用户空间,也可以用来对设备和驱动程序做设置。 procfs太过于混乱,不利于查看设备驱动信息。sysfs 的目的是把一些原本在 procfs中的,关于设备的部份,独立出来,以‘设备层次结构架构’(device tree)的形式呈现。原创 2012-12-19 11:17:13 · 789 阅读 · 0 评论 -
一步一步粗谈linux文件系统(八)---- subsystem_register
总结写在最前面,后面代码解释,我自己都看着烦躁:subsystem_register它首先是要有一个subsystem结构的数据,然后这个结构里的kset需要设置,而kset最重要的是kobject,kobject中的又要有目录项之类的,而这个目录文件要是没有指定父节点,缺省状态下是挂载在sysfs的根目录下的。从这行代码subsystem_register(&fs_sub原创 2012-12-19 21:29:15 · 2108 阅读 · 0 评论 -
一步一步粗谈linux文件系统(九)---- device_register
总结:挂载文件到device下(具体目录可能各有不同),如果是class,则有几个相互的链接。sysfs跟ramfs不同的是,sysfs具体操作,文件建立,生成链接,都用struct kobject,而不是直接的应用dentry。最最简单的理解,就是把一个kobject挂到devices_subsys的kset上。 /** * device_register- reg原创 2012-12-19 21:53:45 · 2928 阅读 · 0 评论 -
jffs2文件系统-------挂载
按照文件系统的惯例,如果是非rootfs的话,就需要手动挂载。如: mount -t jffs2 /dev/mtdjffs2 jffs2 (这行shell的大体意思就是将mtdjffs2这个mtd块设备,按照jffs2文件系统的格式,挂载到jffs2文件夹下)。支持这行shell的前提有两个,其一内核要支持jffs2文件系统;其二mtdjffs2这个块设备上的数据,要符合jffs2文件系统的要求原创 2013-01-03 23:48:43 · 15650 阅读 · 2 评论 -
jffs2文件系统——写操作
在ramfs系统中write过程浅析中已经大致分析了vfs中写入的过程,jffs2大致跟这个过程差不多,略有差异的是generic_file_buffered_write函数中的a_ops->prepare_write和a_ops->commit_writ,这两个函数各文件系统有差异。在jffs2文件系统中如此定义.readpage = jffs2_readpage,.prepare_write原创 2013-01-07 22:42:46 · 3577 阅读 · 0 评论 -
系统起来的一些初始化
1、sysctl_initroot_table行程一张大链表2、helper_inithelper_wq初始化这个工作队列,workqueue_struct,name为kthread3、init_jiffies_clocksource初始化jiffies时钟源4、ksysfs_init生成/sys/kernel5、filelock_i原创 2012-11-27 09:37:02 · 1857 阅读 · 0 评论 -
一步一步粗谈linux文件系统(五)----关于fork,文件系统在各个进程中
关于fork,我们都知道fork出新的进程,会复制旧进程的所有资源,且堆栈、数据不共享。所以关于文件系统,要是不共享,会出现怎么样的情况呢?就是说各个进程都有自己的文件系统copy,那种感觉不敢想象,所以他们一定是资源共享的,一定是同步的。在fork新进程的操作中,其中static structtask_struct *copy_process(unsigned long clone_原创 2012-12-17 22:09:28 · 1253 阅读 · 0 评论 -
一步一步粗谈linux文件系统(四)----挂载VFS
挂载VFS是在mnt_init(见第一部分)里,分两步:1、init_rootfs(); 2、init_mount_tree(); init_rootfs:int__init init_rootfs(void){returnregister_filesystem(&rootfs_fs_type);}简单明了,这个是文件系统初始化的第一原创 2012-12-16 23:31:15 · 1453 阅读 · 0 评论 -
一步一步粗谈linux文件系统(三)----超级块(superblock)
超级块是来描述整个文件系统信息的,可以说是一个全局的数据结构,可以把它理解成文件系统的心脏 比较简单的文件系统中(如ramfs和sysfs),超级块的初始化大致分三步:1、sget2、fill_super3、simple_set_mnt sget:/** * sget - findor create a superblo原创 2012-12-16 23:04:17 · 7164 阅读 · 0 评论 -
一场由mknod引发的扯淡
我们注册完字符、块驱动设备后,一般会用mknod去建立,应用层与驱动的管道。例如mtd的字符驱动,我们会用mknod /dev/mtdchar1 c 30 0,创建/dev/mtdchar1来映射mtd第一个字符设备。由于代码没法红字,代码中有color:#ff6666 开头的行数,为重点分析的接下来我们用代码来分析,这个过程。第一个函数asmlinkage long原创 2012-10-25 09:53:29 · 4634 阅读 · 0 评论 -
sys_open的一些随记
先看函数原型asmlinkage long sys_open(const char __user *filename, int flags, int mode)在fs/open.c。代码一:asmlinkage long sys_open(const char __user *filename, int flags, int mode){ long ret; if (force_o原创 2012-10-25 23:05:01 · 5083 阅读 · 0 评论 -
ramfs系统中write过程浅析
ssize_t vfs_write(struct file *file, const char __user *buf, size_t count, loff_t *pos) //算比较上层的api函数{ ssize_t ret; if (!(file->f_mode & FMODE_WRITE)) return -EBADF; if (!file->f_op || (!file->原创 2012-11-09 16:56:02 · 2072 阅读 · 0 评论 -
关于文件系统的一些心得(ramfs),纯扯淡和流水账
在linux初始化的时候,start_kernel中有vfs_caches_init这么一个函数调用,其中mnt_init这个函数里是初始化全局文件系统的,sysfs这个文件系统,这个文件系统是一些设备总线信息的;至于全局文件系统则是调用这个init_mount_tree();这个函数。我手上的代码中rootfs即为ramfs。 文件系统中有超级块(super block(代码中有时原创 2012-11-11 22:01:58 · 1571 阅读 · 0 评论 -
ramfs的read过程
了解过write之后,read就显得有点轻车熟路了。依旧是在ramfs这个文件系统中,这个比较简单明了一点。ssize_t vfs_read(struct file *file, char __user *buf, size_t count, loff_t *pos){ ssize_t ret; if (!(file->f_mode & FMODE_READ)) return原创 2012-11-11 20:46:20 · 1494 阅读 · 0 评论 -
粗谈linux内存管理
先转一张图,图出自chinaunix论坛,but具体找不到是哪个帖子。 写在最前面:linux每个进程都有4G虚拟内存空间,而虚拟内存可以这么理解,就相当于我用3公里的铁轨(物理内存),让火车(程序当前需要的物理内存数)从北京跑到上海(虚拟内存), 只要铁轨铺的够及时,火车始终能在铁轨上跑。 在应用层看到的内存地址全部都是虚拟地址。一:原创 2012-11-21 22:55:40 · 899 阅读 · 0 评论 -
一步一步粗谈linux文件系统(二)---------文件系统初始化
文件系统的初始化过程,两个大的过程1、register_filesystem(structfile_system_type * fs)2、struct vfsmount *kern_mount(structfile_system_type *type)register_filesystem:先看源代码中的注释:/** * register_file原创 2012-12-16 21:44:38 · 1527 阅读 · 0 评论 -
一步一步粗谈linux文件系统(一)----start_kernel
关于文件系统,这确实是个大工程,前面对ramfs中的read,write之类的进行了,极为简略的分析,还是有点诚惶诚恐,觉得有必要再进行一次更为深入的分析。好了,那就从最原始的start_kernel开始。(手上代码为2.6.19mips内核)vfs_caches_init_early void __init vfs_caches_init_early(void) { dca原创 2012-12-16 21:34:01 · 1228 阅读 · 0 评论 -
jffs2文件系统——MTD驱动挂载
总所周知,jffs2是主要用到的是mtd驱动,用mtd驱动作为jffs2文件系统的工具。所以在mount jffs2之前,必须要挂载MTD驱动。MTD驱动最关键的其实是往mtd_table[]这张表里添加东西。platform_driver_register(&a) a.probe add_mtd_partitions add_mtd_dev原创 2013-01-09 22:55:36 · 3433 阅读 · 0 评论
分享