- 博客(32)
- 资源 (8)
- 收藏
- 关注
原创 Huawei EROFS 初探
前言华为作为中国代表性的技术型企业,一直在不断推出自己的技术实现,并努力推广到世界,这一点是非常值得称赞的。从大概上游Linux 4.19左右,邮件列表开始出现一个EROFS的东西,不断有邮件的往来。因为太小众,所以当时没有太留意,只是因为EROFS这个名字和写只读文件系统时返回的错误名字一样,所以就留下了印象,其实都没注意到是华为的人做的。最近华为推出新手机,并宣扬自己为手机系统新写的文件系...
2019-03-28 00:59:11
3377
1
转载 欢迎使用优快云-markdown编辑器
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl
2016-04-01 11:21:42
1049
原创 Linux下的fallocate操作
1. fallocate和posixfallocate这货是Linux特有的系统调用,并不符合POSIX标准,为了兼容posix标准的fallocate,glibc专门做了一个posix_fallocate函数,看名字就知道这个函数是对应posix标准实现的。然而它和我们要说的fallocate没有任何关系,虽然它从功能上好像是实现的fallocate的基本功能,但是本质上它们是两回事。fal...
2016-04-01 02:55:24
12097
原创 再议O_DIRECT, O_DIRECT与logical_block_size
之前我们说过一篇关于O_DIRECT的问题,那篇是在编译的时候需要注意的问题,编译之后就要运行,关于DIRECT I/O的使用可能很少有人会关注,特别是在C语言里直接使用。如果不是遍写很底层的I/O代码可能不会用到direct io来做什么操作,大部分也都是用默认的buffer io。前不久我们在测试的时候发现LTP也有使用DIRECT I/O的错误,在某些体系结构上会造成运行错误,当然那个问题已
2014-12-05 15:16:16
2462
原创 mount过程分析之五(mount_bdev->fill_super)
sys_mount - > do_mount -> do_new_mount -> vfs_kern_mount -> mount_fs -> xfs_fs_mount -> mount_bdevmount_bdev是针对块设备挂载时使用的函数,此外还有mount_nodev, mount_single等函数,分别用于不同的挂载情况,这里以mount_bdev为例继续讲解。看一下mount_b
2014-10-15 18:36:47
8112
原创 mount过程分析之四(vfs_kern_mount->mount_fs->xfs_fs_mount)
sys_mount - > do_mount -> do_new_mount -> vfs_kern_mountvfs_kern_mount的作用就是准备好一个完整的mount结构,包括个别文件系统的个别信息,以及vfs层的通用信息。vfs_kern_mount(struct file_system_type *type, int flags, const char *name, vo
2014-10-14 18:01:31
6231
原创 mount过程分析之三(do_mount -> do_new_mount)
sys_mount - > do_mountdo_mount函数也在namespace.c里可以找到,如下:long do_mount(const char *dev_name, const char *dir_name, const char *type_page, unsigned long flags, void *data_page)
2014-10-13 18:40:45
5575
原创 mount过程分析之二——mount系统调用
= 引文 =上文中我们说到了file_system_type,以及一个文件系统是如何在内核中注册产生的。但是注册了一个文件系统并不代表这个文件系统被使用了,就像你注册了优快云帐号但是你不登陆就没有使用它。同理,你不挂载文件系统,这个文件系统在内核中就以一个file_system_type的形式存在,仅仅是存在这么一个type,并没有构建到全局文件系统树中。回忆一下,注册file_sy
2014-10-11 22:41:05
9541
原创 mount过程分析之一(基于3.16.3内核)
file_system_type数据结构研究linux fs的入手点应该是哪呢?可能仁者见仁,智者见智。我一直以来也都是零零散散的翻阅着有关super block, inode, dentry, file等等内容的各种代码和资料,但是知识始终是散乱的,无法拼凑成完整的体系。现在我要试图整理顺一个整套的文件系统知识,我决定从file_system_type入手。本文是要尽力将我已经掌握的
2014-10-10 16:13:09
6090
原创 Guake terminal with mlti-monitors
一直使用Guake终端,感觉蛮好用的,快速的切入切出感觉很爽。但是由于我在工作室的时候会使用很多显示器,多屏令guake表现不尽如我意。我不能随意的把guake终端放到我正在操作的屏幕上使用。针对这个问题,有一次我和同事说起,他说能够给我一个patch让我在多显示器下切换使用guake,那个patch如下:--- /usr/bin/guake.bak 2013-05-27 14
2014-10-10 15:12:08
1067
原创 要命的编译警告——指针参数类型混乱
前两天在写程序的过程中发现一个问题,编译后运行结果总是不对,修改了很多回算法都不对。由于整个项目代码过长,所以抽出出错的模型重新写一个简单的易于表述的程序,如下: 1#include 2
2014-10-10 15:09:38
1230
2
原创 谁执行了我的main函数
接着说“调用”,前面我们提到了一点系统调用,又略微详细的说了一下函数调用,现在接着说一下程序调用,应该说是执行一个可执行程序。前面的几篇文章都在围绕着函数调用栈来说,从main函数开始到每个函数的调用和返回,那么在main函数之前和main函数之后,也就是开始执行程序的main函数之前以及main函数返回后又有什么样的动作呢?当我们在终端输入一个可执行文件的路径名时,如:lin
2014-10-10 15:07:33
1728
原创 写一个能输出自己的c程序
今天晚上和一个大一的孩子讨论C语言的问题,闲来无事又看到这个孩子很好学,就出了一个很经典的问题给她:写一个程序输出程序代码本身(不能把源程序open之后输出出来)。对于很多C语言的牛人来说这种问题简直就是糊弄小孩的,好吧,我这个题就是出给小孩纸的;) 在等她解答的过程中我也自己尝试的写了一个程序print_myself.c:#include int main(){
2014-10-10 15:07:23
1543
原创 递归函数的堆栈操作
前文我们介绍了函数调用和返回的过程,下面我们以递归为例进一步看一下函数调用的堆栈操作。我们就先用C语言写一个阶乘的简单递归程序factorial.c: 1#include 2 3int factorial(int a){ 4 int ret; 5 if (a > 1){ 6 re
2014-10-10 15:02:35
1721
原创 简单函数的返回
上文http://1386160874.spaces.eepw.com.cn/articles/article/item/101726我们说到了函数调用,有调用就要有返回,下面我们说函数的返回。首先为了方便先把代码粘贴到这里: 1#include
2014-10-10 14:54:14
1145
原创 如何调用linux系统调用
所谓调用就是让另一个子模块或子系统帮助自己干一些事,然后再返回回来。在我们的口头语中常常用“调XXXX”,这个“调”字被应用的范围太广了,执行一个API函数时我们会说调XXX,执行一个系统调用时我们也会说调XXX,甚至执行一个可执行文件时我们也会说调XXX…… 实际上仅就上述三种“调”来说,完全就是不同的三个概念。先说一下函数调用: 函数调用最常见,函数
2014-10-10 14:50:11
1108
原创 简单函数的调用原理
上文我们提到了系统调用,现在说一下函数调用。函数调用应该是一个编程者除了写if...else以外最常写的东西了,记得多年前我第一次写一个C语言函数的时候还觉得很神奇。我们的程序不能只有一个代码段,那么做将使得程序很难协同开发和维护,将程序分割为部分进行封装,每一部分都定义良好的接口,这是非常重要的,我一直觉得封装和接口是人类进步的基本方式。好吧,这里我们不讨论封装和接口,我们讨论函数是怎么调用和返
2014-10-10 14:49:18
4997
原创 AT&T汇编语言及其寻址方式简述
汇编语言早已脱离了主流编程语言的行列,可以说现在基本上没有人想用它来完成什么大的项目,但是作为一个程序员懂得汇编语言是一种修养一种底蕴。看不懂汇编的程序员就像不会画鸡蛋的达芬奇,像不会写楷书的王羲之,像不懂TCP/IP的黑客……本文为后文做铺垫,适合已经有一点汇编基础的人快速浏览阅读,如果没有这个基础请自行学习。汇编语言论风格来分主要是两类,一类是Intel汇编,一类是AT&T汇编,分
2014-10-10 14:48:28
7254
2
原创 利用开源更好的学习
本文我写在了EEPW的博客上,为了更好的分享,现也同步到这个博客里:http://1386160874.spaces.eepw.com.cn/articles/article/item/100869今天看见一个FreeBSD邮件列表上很早的一封邮件,http://lists.freebsd.org/pipermail/freebsd-current/2010-August/
2013-12-09 10:18:59
1526
原创 剖析C语言中a=a+++++a的无聊问题
本文本来属原创,但原文我写在EEPW博客里了http://1386160874.spaces.eepw.com.cn/articles/article/item/100850,所以同时也转载在这里。 今天中午在QQ群里和同僚们闲聊,突然就聊到了a+++++a的问题。这种纯属C语言 “二” 级的问题应该是从a+++a引申出来的吧。于是乎兄弟姐妹们开始讨论它的运算结果,以及改如何理解。更有人写
2013-12-05 20:43:31
2086
1
原创 char *pname和char name[]的区别
昨天在为glusterfs写一个test case的时候遇到了一个问题,使得以为很简单的问题多耽误了五分钟。最后使用gdb定位问题后才发现自己犯了一个很愚蠢的错误。好了,我们来看一下问题是什么吧。首先程序开始时我使用main函数的argv作为我需要的参数,让测试参数从外部传入。后来我觉得其中一个参数可以固定写在程序里,不需要每次都从外部传入。于是我就做了类似这样的修改(不是原修改,只是
2013-12-04 15:36:32
3111
原创 在Linux下简单编写、编译并执行一个C语言程序
本文面向第一次在linux尝试写C语言程序的新人。有经验的请绕行。C语言用法不是本文介绍的关键,本文只是引入如何第一次在linux系统下编写、编译和执行一个简单的c程序。学会后请自行深入。= 前提基础 =Linux系统的路径写法有两种,一种是相对路径一种是绝对路径。绝对路径都是以“/”开头的,比如/usr/bin/vi或者/home/zorro/,代表从根目录"
2013-12-02 23:58:47
62112
2
原创 傻瓜式安装Fedora-19
本文目的在于让没有用过linux系统的人在零基础的情况下最简化安装一个Fedora-19系统。如果你想安装在实体机的空硬盘(这里注意,如果你不会安装请不要贸然使用整个电脑的硬盘,否则将很有可能造成硬盘数据严重丢失。)可以跳过虚拟机安装部分。如果你想在虚拟机下尝试使用和安装,则请先看第一部分的虚拟机安装。Fedora-19的镜像地址:x86_64平台,Gnome桌面定
2013-12-02 17:39:39
2867
原创 解决fedora的cscope默认使用了vi(同时设置emacs为用户默认编辑器)
问题说明:我以前是使用debian系统的,最近新安装了Fedora-19系统,发现cscope默认不使用vim而使用vi,但是系统确实是默认使用vim的。所以想把cscope的默认编辑器问题解决了,或者干脆改成让用户默认使用emacs。if 不想看原因分析,then 可以跳过“原因分析”一段。else if 喜欢使用vim,then 直接看“默认使
2013-11-29 16:46:13
1914
原创 浅谈习惯使用less命令的重要性,让less命令“丰富多彩”
首先声明这不是一篇讲GNU的less命令使用技巧的文章,当然最后会有一点关于改进使用的内容。我一直很常用less命令,我周围的同事在查看系统的文档时都是习惯用vi直接打开查看,我非常反对这种做法。何为系统安全,防止外界入侵是一方面,防止自己破坏系统也是关键之一。有很多人喜欢直接使用root用户操作,或者喜欢把自己的用户权限最大化,美其名曰“操作方便,节省时间”,确实是省去了考虑操作权限的问题,但是
2013-01-23 14:44:13
1895
原创 debian squeeze安装Broadcom网卡驱动全程
我的笔记本的三星的Q430JU02,安装debian squeeze系统挺久了,由于本人平日很少使用无线网,所以一直没有让无线网卡工作。今天由于有线网网口紧张,所以被迫想办法启动了无线网卡,整个过程从驱动安装到配置到最后连接成功。下面说一下简单的流程,如果你是我说的系统和硬件,那么按照这个流程一步步走下来基本就可以让你的无线网卡工作了(如果有蓝牙估计也会工作)。硬件环境:三星Q43
2012-11-29 14:38:58
2530
原创 使用kgdb调试内核之模块调试
昨天搭建的kgdb调试环境,今天面临的第一个问题就是调试我的模块。调试内核根据上一篇文章的介绍已经够了http://blog.youkuaiyun.com/zr_lang/article/details/8107015,但是调试模块还需要一些额外的工作。下面针对用kgdb调试内核模块的问题的重点部分简要说明一下。首先,有一个小技巧先说明一下,那就是如果你想在gdb没有进入断点的情况下从目标机运行中将主动权
2012-10-26 12:46:08
2769
原创 使用vistualbox建立kgdb调试环境
好吧,我不得不承认没有一种调试技术是万能呢,昨天刚说了UML调试linux内核,今天就又要用kgdb调试了……kgdb吧,是linux内核的私生子,他被linux内核细心的呵护和照顾着,用kgdb调试内核确实是比较主流的一种做法。既然是主流,你可以不喜欢,但你不能不了解(你得先了解主流,才能说你是喜欢主流还是非主流吧)。借着今天帮BOSS搭建kgdb调试环境之际,将方法记录下来,以备后用,并分享与
2012-10-24 19:05:11
2248
原创 建立UML(user mode linux)的linux内核调试环境
其实调试内核我最喜欢的还是print,因为它很灵活,这基本上是一个万能的东西,但是print总是需要自己去找对位置然后写上合适的print语句,有时还要为print一个东西而作很多准备工作。如果很复杂的时候可能要在很多点放置print,然后重新编译一遍,再跑一遍再看,如果不行还要再重新写,这就是print的局限性(但我还是乐此不疲)。由于print的缺点我们会去寻求其它的调试内核的手段,下面要说的
2012-10-23 17:32:52
5444
1
CCD传感器相关资料
2009-07-10
java编程思想第四版习题及解答
2009-03-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人