- 博客(21)
- 资源 (4)
- 收藏
- 关注
原创 GNU ARM汇编--(二)汇编编译链接与运行
GNU的汇编器是GNU Tools的一部分,可以用来ARM的汇编语言源代码编译为二进制文件.关于GNU汇编器的介绍可以搜索《GNU Assembler Manual》.这里我们只是做一个简短的介绍,对GNU汇编器有一个大概的认识,同时通过两个例子了解一下GNU ARM汇编. 给出一个模板文件: .text
2012-04-26 22:28:46 16062 10
原创 GNU ARM汇编--(一)开篇
在大学的时候,汇编就是学的很烂.一是对汇编这门语言没概念,二是那些指令集很难记清楚,用的机会也少,自然学的不好.但是现在觉得相当有必要重头学习一下汇编.部分原因我在上一篇写完设备模型的总结时提到了而.最近在看一本书《ARM:Assembly Language Programming》,作者是Peter Knaggs & Stephen Welsh.作者在开头也提出学习汇编的必要性和重要性,借他们的
2012-04-22 20:02:26 14428 6
原创 linux文件系统的系统分析--(十七)总结
从文件系统写到设备模型,写的很舒畅,写的过程中自己重新做了整理思考,很有收获. 那我之所以将文件系统和设备模型放在一起写,因为linux的哲学就是一切都是文件,所以文件系统和设备模型是分不开的,单单理解设备模型还是不充分的,理解了文件系统后,再看设备模型就会有不一样的感受. 王阳明说"知行合一",做了这么多的理论上的分析后,就需要找块板子来实践,验证和加
2012-04-15 22:30:49 1677
原创 linux文件系统的系统分析--(十六)sysfs和设备模型--从platform和rtc来感受设备模型
分析文件系统后,再分析设备模型,从而自然的理解了sysfs和设备模型的关系.既然linux2.6引入了设备模型和sysfs,那肯定是比之前更为先进的.下面要分析下内核中如何利用设备模型去管理设备的,在内核的driver目录下有好多子目录,比如iic spi pci input usb这些子系统的框架,这些框架都是在设备模型的模型之上再去抽象的.我们仅以platform这种虚拟的总线类型和rtc这种
2012-04-15 22:16:05 2336
原创 linux文件系统的系统分析--(十五)sysfs和设备模型--Class
看完了bus device和driver,终于到了设备模型上层架构的最后一个单元:class.class的初始化同样是在driver_init下: driver_init-->classes_initint __init classes_init(void){ class_kset = kset_create_and_add("class", NULL, NULL); if
2012-04-14 23:22:25 2057
原创 函数的调用与自增(减)运算符
记得前段时间有个技术群里有哥们给了这么一道面试题: int i = 5; printf("%d %d %d\n",i++,i++,i++); 刚一看以为答案就是5 6 7 ,其实答案是7 6 5.为什么这样?因为函数调用参数压栈的顺序是从右到左的. 可以写个简单的函数调用关系,然后反汇编分析一下://name:add.
2012-04-13 21:27:27 3452
原创 linux文件系统的系统分析--(十四)sysfs和设备模型--Driver
看完了device看driver,给出device_driver的结构体:struct device_driver { const char *name; struct bus_type *bus; struct module *owner; const char *mod_name; /* used for built-in modules */ bool suppre
2012-04-11 21:26:02 1797
原创 linux文件系统的系统分析--(十三)sysfs和设备模型--Device
分析完了bus,接下来分析device: 同样在driver_init-->devices_initint __init devices_init(void){ devices_kset = kset_create_and_add("devices", &device_uevent_ops, NULL); if (!devices_kset) return -ENO
2012-04-11 20:32:09 2459
原创 linux文件系统的系统分析--(十二)vfs层的三个hashtable
在vfs_caches_init中有三个重要的hashtable:mount_hashtabledentry_hashtable inode_hashtableHashtable有什么作用?主要的查找的效率很高,vfs层用这三个就是为了提高查找效率。另外一个,inode和dentry是内存中的数据,而数据的来源是硬盘,如果我们获得了inode和dentry数据,加到hashtable中,方
2012-04-10 21:01:54 4518
原创 linux文件系统的系统分析--(十一)sysfs和设备模型--Bus
在分析设备模型的bus之前,我们看一下初始化的过程,很有意思: start_kernel-->rest_init-->kernel_init-->do_basic_setup 在do_basic_setup中有个usermodehelper_init有意思,凭感觉,这个函数与kobject_uevent有联系,kobject_uevent做什么的,就是内核空间来通知用户空间
2012-04-08 21:45:30 2435
原创 linux文件系统的系统分析--(十)sysfs和设备模型--kobject、kset和ktype
前面分析了这么多,是因为设备模型和文件系统的联系很紧密,了解sysfs是为了更好的理解设备模型。 在分析sysfs的时候,我们也看到了sysfs_dirent与kobject的紧密联系。这一次我们分析下kobject kest和ktype。在vfs层,sysfs的目录和属性文件都有对应的inode和dentry;而在sysfs中,不管目录还是文件,都用统一的sysfs_diren
2012-04-08 19:08:57 2926
原创 linux文件系统的系统分析--(九)sysfs下属性文件的读写
sysfs的属性文件的读写,我们先看下open,open系统调用最终会调用sysfs_open_file struct sysfs_dirent *attr_sd = file->f_path.dentry->d_fsdata; //获取sysfs_dirent结构struct kobject *kobj = attr_sd->s_parent->s_dir.kobj;
2012-04-07 17:54:52 6437
原创 linux文件系统的系统分析--(八)sysfs中sysfs_dirent与inode dentry的关系
对于具体的文件系统,因为在vfs层下,所以必须有inode和dentry才能用,但从前两篇中我们只看到了sysfs中的sysfs_dirent搭建起来的目录树,通过sysfs_dirent与kobject的紧密关系,也可看到kobject的层次关系。 但前面的创建目录和创建文件,都没有inode和dentry,下面我们就看看sysfs中sysfs_dirent与inode dentr
2012-04-07 16:01:05 6267 4
原创 linux文件系统的系统分析--(七)sysfs下属性文件的创建
属性文件的建立和目录的建立相差不大,因为不管目录还是普通文件,都由一个sysfs_dirent代表sysfs_create_file-->sysfs_add_file-->sysfs_add_file_modeintsysfs_add_file_mode(struct sysfs_dirent *dir_sd,conststruct attribute *attr, int type,
2012-04-07 15:28:26 2991
原创 linux文件系统的系统分析--(六)sysfs下目录的创建
对sysfs和设备模型有了解的都会知道sysfs实际是为了将设备模型导出到用户空间的一个内存文件系统。 设备模型的关键结构体kobject会组成设备模型的树形结构,而sysfs的关键结构体sysfs_dirent也是类似的树形的结构,vfs中的dentry同样是类似的树形结构。 sysfs目录文件的创建都是由设备模型的上层构件(bus device driver c
2012-04-07 11:29:20 6748 2
原创 linux文件系统的系统分析--(五)路径名的查找
do_path_lookup是文件系统中最基本的函数,也是非常重要的,里面各种情况,各种goto,总之各种坑爹。。 没能把所有的goto都理清,只看了标准情况下的路径查找,但主要的关键点都是一样的,弄清了关键点,心中对文件系统的路径名查找就有了概念。不管绝对路径名,相对路径名,还是带符号链接的,又有什么质的区别呢? do_path_lookup分为两步:
2012-04-07 10:29:35 4722
原创 linux文件系统的系统分析--(四)sysfs的安装和挂载
在上一次分析rootfs的安装时,其实是不准确的,应该称为安装根文件系统。 安装根文件系统分为两个阶段: 1、内核安装特殊rootfs文件系统,该文件系统仅提供一个作为初始安装点的空目录。 2、内核在空目录上安装实际根文件系统。比如pc上的ext4,比如嵌入式中用到的各种flash的根文件系统。 这一次分析sysfs,发现sy
2012-04-05 19:11:26 6377 1
原创 linux文件系统的系统分析--(三)rootfs的安装
在《linux文件系统的系统分析--(一)文件系统类型的注册》我们以rootfs为例分析了文件系统是如何注册的,接着我们就分析rootfs的安装。 在mnt_init-->init_mount_tree:static void __init init_mount_tree(void){ struct vfsmount *mnt; struct mnt_namesp
2012-04-03 18:51:03 4677 1
原创 linux文件系统的系统分析--(二)文件系统类型的注册
因为linux支持模块机制,所以我们可以将文件系统编译为模块,所以文件系统系统类型的注册的注册有多种方式:要么已经包含在内核映像中,要么作为一个模块被动态加载。我们关注的重点是rootfs和sysfs,他们其实在系统初始化的时候就注册并安装好了,没有rootfs,linux就没法玩了。以rootfs的注册为例,来分析一下文件系统类型的注册: 在start_kernel-->vfs
2012-04-03 15:43:17 4115 1
原创 linux文件系统的系统分析--(一)vfs和数据结构
linux的虚拟文件系统层的特点在于把很多不同种类文件系统的共同信息放入内核;可以通过vfs的转换来利用linux所支持挂载的实际文件系统。实际上,因为有了vfs,也可以较为方便的按照vfs的一些接口将文件系统移植过来,比如win下的ntfs和fat32就是如此。在open read等系统调用之后就是到vfs_read 等式样的函数,在vfs层做些处理后,再根据当前操作的路径所挂载在哪个文件系统下
2012-04-02 20:54:55 3808 1
原创 linux文件系统的系统分析--开篇
在看设备模型的时候,对sysfs、devtmpfs有一定了解,也分析过linux下的一个简单的文件系统:omfs。但当时的分析比较散,现在觉得还是得花时间再系统的整理一下为好。因为目前对linux的内存管理还不熟悉,关于vfs中高速缓存的部分暂且略过。这次开篇,准备按照:根文件系统挂载和“/”;文件系统的挂载,sysfs的分析(基于内存的fs和基于磁盘的fs还是有不少差距的),然后在这个基础上再分
2012-04-02 19:13:14 1795
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人