自定义博客皮肤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 Kernel Developer

I was high-level programmer, then low-level one. One day I'll be machine-language programmer !

  • 博客(55)
  • 资源 (19)
  • 收藏
  • 关注

原创 C 语言中的元素指针与一维数组指针

在我上大三的时候,有段时间发现自己对指针的理解不够深入,所以就看了《Pointers On C》这本书的指针章节,当时印象很深刻的是接触到了一维数组指针这个概念,最近我在看内核代码时又遇到了这个问题,结果一时间竟然没看懂,搜了资料才想起来这么个概念。举个例子:#include<stdio.h>void main(){ int boot_gdt[] = {1,2,3}; int *a

2017-07-26 20:58:17 755

原创 博客迁移说明

本博客于2017年迁移至 haolee.io

2017-06-28 08:45:43 551 2

原创 Linux 内核中逻辑地址/虚拟地址/线性地址三者的区别

本博文引自我的知乎回答:Linux 线性地址,逻辑地址和虚拟地址的关系?为了防止歧义,以下术语都用英文。部分术语不做解释了,不然答案就太长了。以下讲解都是以代码段为例在 Intel 平台下,逻辑地址(logical address)是 selector:offset 这种形式,selector 是 CS 寄存器的值,offset 是 EIP 寄存器的值。如果用 select

2017-05-03 22:27:15 1626 2

原创 如何向 Linux Kernel 提交 Patch

昨晚终于向内核上游提交了人生中第一个 Patch,今天早上起床迫不及待的看手机,发现维护者 Andrew Morton 在6点31分回复我了:The patch has been added to the -mm tree. 顿时感到异常兴奋。虽然这个 Patch 没什么技术含量,但是至少这是我在看代码过程中自己发现的,终于体会到了进步的感觉。下面我把 Patch 提交的步骤记录一下,也供别人

2017-04-04 11:54:19 3611 6

翻译 如何向 Linux 内核上游提交 Patch ?

在GitHub上有本内核电子书叫《Linux Inside》,虽然完成度不高但还是很火的,它还有了自己的中文版翻译项目,我也参与了该项目的翻译工作,以下内容即为该书第 13.3 节的翻译版,主要讲解了怎么修改内核、生成 Patch 并提交给上游。

2016-12-31 17:22:56 4700

原创 内核菜鸟的成长之路

好几个月没更新博客了,因为我这一段时间一直在潜心研究 Linux 2.6.24 内核源代码,重点学习内存管理子系统,内核这东西太过庞大,一时半会儿研究不出什么成果,所以更新博客的速度就慢了。市面上的内核书籍虽然都是好书,但是总有一些地方一本书讲不明白,要好几本书交叉着看才行。期间遇到难题是常有的事儿,尤其是涉及到复杂数据结构的地方。

2016-12-31 17:06:50 646

原创 使用bochs和gdb联合调试Linux内核

bochs这个软件准确来说应该叫做“模拟器”,而不是虚拟机,因为VMware等虚拟机是将Guest系统所有的指令都放到真实硬件上执行,而bochs模拟器则是直接用软件模拟硬件的执行,举个例子,在bochs里你可以自定义CPU指令并在汇编里使用,这一条足以说明bochs是多么强大,实在是操作系统开发者首选的利器。bochs安装上一篇博文讲了DDD的安装,这一篇博文先将讲bochs的安装,

2016-03-15 17:37:34 2130

原创 宇宙最强调试器DDD(Data Display Debugger)

Linux主流调试器是gdb,但它是纯命令行界面的,调试起来不方便,我需要更强大的力量。在试用了各种工具之后,我相信我找到了,是的没错,就是它——宇宙最强调试器——DDD。DDD介绍DDD全称Data Display Debugger,当我第一次见到它时,它的界面着实让我吃了一惊,如此的简陋,如此的怪异,我甚至想立刻删了它,但是当我见识到它强大的功能时,我被深深的震撼了,如此的飘逸

2016-03-14 09:38:14 10261 4

原创 使用bochs运行Linux Kernel-2.4.0

上一篇博文讲了如何制作bochs硬盘镜像并且将grub装进去,这样我们可以在启动bochs后进入到grub界面。这篇博文我们将2.4内核写入硬盘镜像,这就可以使用bochs直接启动内核了。我的实验系统是这么布置的:CentOS 6.4 VMware虚拟机上修改代码和配置文件,用git做版本管理,同时还开着另一台虚拟机RedHat Linux 7.3,专门用来编译内核代码,毕竟2.4内核很老

2016-03-12 10:52:09 1513

原创 使用bochs和grub建立可引导硬盘镜像

bochs,发音同box,是我非常喜欢的虚拟机,灵活易用方便配置,功能极强,用来调试Linux内核是非常合适的。这篇博文主要讲解如何建立硬盘镜像,并且将grub安装上去,最后的结果就是bochs启动后能进入到grub引导界面。下一篇博客再讲解如何在镜像上安装Linux内核。硬盘基础知识硬盘的专业术语中有:柱面,磁头,扇区,每磁道扇区数这几个概念。每个盘片有两个磁头,分别位于

2016-03-11 12:45:16 3140 2

原创 Kernel 2.4.0 之 head.S 为何用两次 jmp 刷新 EIP 寄存器

movl %eax,%cr0 /* ..and set paging (PG) bit */ jmp 1f /* flush the prefetch-queue */1: movl $1f,%eax jmp *%eax /* make sure eip is relocated */1:在head.S中,这里为什么要连续 jmp 两次? 下面就是我的分析过程。

2016-03-07 19:36:43 616

原创 华为荣耀3C彻底root的方法

首先你要用任意一款一键root软件将手机root掉,现在的root工具都很容易在一分钟之内搞定。但是这样的root都不彻底,你无法修改很多系统文件,比如/system/build.prop,想修改机型信息的话你必须修改这个文件,但是你会发现即使你root了手机,这个文件改了还是会自动变回去,这就是因为你的root不彻底。下面就是彻底root的方法。1,首先用百度一键root或者

2016-01-27 17:26:10 3631 1

原创 Linux 2.6、4.3内核编译过程的感受与总结

之前编译过2.4.10的内核,很好编译,中间曾经漏下了SCSI low-level drivers下的BusLogic SCSI support选项导致没法启动系统,后来打开该选项后就行了,随手关闭一些没用的选项后编译速度非常快,30秒之内完成编译。当初以为内核编译也不过如此,直到这四天开始编译更新的内核才让我吃了大亏。我起初的想法是编译一个极其简洁的内核,去掉网络、USB、光驱、等等所有

2016-01-25 00:05:51 1887

原创 Ghost 博客系统终极安装教程,装不上来打我!

Ghost这个博客系统可真是难装,第一次装放弃了,转而用的JustWriting,但是这个系统也太精简了。。。第二次找到了一篇Ghost安装参考教程,结合官网文档略加修改成功安装。官方文档建议使用nginx转发80端口请求,为什么不直接让ghost使用80端口呢,因为ghost需要运行在root权限上,为了避免风险,就用nginx转发一下。但是这存在一个问题,我的服务器上本来就有Apach

2016-01-09 18:05:37 7298 2

原创 Linux 0.12内核与现代内核在内存管理上的区别

0.12内核的内存管理比较简单粗暴,内核只用了一个页目录,只能映射4G的线性空间,所以每个进程的虚拟空间(逻辑空间)只能给到64M,最多64个进程;每个进程都有对应的任务号nr,当一个进程需要分配进程空间时,只需要nr乘以64M就可以得出该进程空间的线性起始地址。然后该进程的代码段、数据段描述符里面的基址字段会被设定为(nr x 64M),同时可以为进程分配页目录项和页目录表用以承载映射关系。

2015-10-20 13:40:48 751

原创 Linux下C语言图形化调试工具RedHat Insight,极致调试体验!

很多人不习惯GDB命令行的调试方式,尤其是使用过Eclipse、VS2010、CodeBlocks那种鼠标悬浮显示变量值的功能之后,感觉真是太方便了。再一对比GDB要用命令才能显示变量值,想看源码还要用list命令,对于那种调了半天还是不见BUG在哪的情况,简直是日了狗了。我曾尝试过各种图形化调试工具,gdb -tui不好用,除了加了个显示代码的框之外没有什么新功能。DDD这玩意儿还可

2015-09-10 10:34:09 3876 2

原创 学生组建开源社区的困境与危机

很多大学都有一批喜欢技术的学生,很多人聚起来想组建开源社区,这是好事,但是事情的发展远没有那么顺利。开源社区听起来似乎很好组建,只要召集一票人马,大家加个QQ群,这就算初步组建成功了。以后再建个论坛网站什么的,心血来潮再去Github上传几个个人开发的小项目,这就算是正式成立了。但是创业容易守业难,开源社区是以贡献作为话语权的标准,学生社区在这点上很难做到,或者说很容易走偏。基

2015-08-12 15:19:24 631

原创 Java调用 新浪微博API 接口发微博,逐条讲解,绝对清晰

最近要做个课程设计,使用微博控制树莓派,树莓派再控制发光二极管的亮和灭,主要设计分两层,上层是用Java调用新浪微博API来实现对微博旳监听,当我的微博被回复时能够自动读取评论内容,并根据评论的指令内容来决定树莓派的控制动作。下层是用C语言调用操作系统底层接口来实现用树莓派GPIO接口控制发光二极管的闪烁、亮灭。由于网上教程都很老了,最近微博接口发生了很多变化,所以我决定全新写一篇详细的博文,

2015-05-29 15:34:39 4374 5

原创 C语言extern引用AT&T汇编中的变量,任意转换类型

今天研究出了一个小问题,在C语言里引用汇编的变量,会是什么结果,汇编中的变量没有像C语言中int类型那样的类型约束,可以把数据当作任何类型处理,那么传到C语言中我们应该当作什么类型处理呢。换句话说,在汇编里定义变量var,在C语言里引用,我们肯定要用extern声明var外部变量,那么extern后面接什么类型?难道是extern int var么?还是 extern short var

2015-04-18 21:49:03 1723

原创 Linux tty字符终端下VIM显示混乱的解决方法

前几天自己配好了vim作为C语言开发环境,加了几个插件,语法高亮、字体大小都改了改,在gvim下用着很舒服,在图形界面的终端窗口下使用vim也是很舒服,但是偶然发现到了tty虚拟终端下就挂了。比如我写个代码:这个看着很爽,代码自动提示什么的都有。然后我保存这个文件,拿到字符终端打开:就这样了,敲几下键盘全是混乱的字符。后来经过排查发现

2015-03-31 13:42:49 3484 1

原创 Apache访问index.html总是出现403 Forbidden错误的解决方案

刚装了Apache,我保证/etc/httpd/conf/httpd.conf这里面设置的没问题,什么权限啥的一点问题都没有,不要再说什么Deny from all了,根本不是这玩意儿的问题。我的httpd.conf里面都是Allow from all,怎么会是配置问题。那是哪里的问题呢?请接着看:我在/var/www/html里面使用命令产生一个简单的文件

2015-02-03 12:11:42 3938

原创 CentOS 6.0 Minimal最小化安装后VMware虚拟机联网详解

最近想搞个mailman邮件列表,又不想在我常用的CentOS 6.4上做实验,怕破坏了环境,于是就想装个试验机,又嫌它占空间太大,于是找了半天发现CentOS 6.0的minimal版本最适合了,装完后发现真的是很小,才600多M,不过因为太精简而导致连网络都没有。下面介绍怎么样配置网络,装完系统后紧接着就能按下面步骤来进行了。(注意这是VMware虚拟机,要是你用物理机的话直接用rp-pppo

2015-01-21 23:23:29 1282

原创 CentOS 6.4 拨号上网全攻略,不行你打我~

注:这里是物理机上网教程,不是虚拟机,虚拟机没这么麻烦~本文是吐槽和教程的混合体,所以各位看官耐心看~    CentOS上网真是个麻烦的事情,它不像Ubuntu一样在安装时就能配置好网络,它会出现各种问题。首先我的电脑直接插网线后,ifconfig显示找不到eth0。后来仔细一看网线接口根本不亮!后来找了半天终于把驱动找到了,装完驱动插入内核模块后,网线接口亮

2015-01-10 21:42:04 1547

原创 CentOS 6.4保留yum下载的rpm包

yum 默认情况下,升级或者安装后,会删除下载的rpm包。可以设置升级后不删除下载的rpm包vi /etc/yum.conf[main]cachedir=/var/cache/yumkeepcache=0将 keepcache=0 修改为 keepcache=1, 安装或者升级后,在目录 /var/cache/yum/i386/6/base/packag

2014-12-16 16:19:06 871

原创 CentOS 6.4安装在物理机上,Atheros AR8161/AR8162网卡驱动问题

被这个问题虐惨了,只为后来者不要再被虐,故写此文。CentOS 6.4装在在物理机上和Win7形成双系统,但是CentOS却一直没法联网,仔细一看才发现网线接口根本不亮。因为网卡驱动不存在!你执行ifconfig命令也显示不出eth0!在Windows下个驱动精灵搞定驱动问题极其方便,但是在Linux就要你自己找了。现在我已经找好了,对于CentOS 6.X 系列的来说,如

2014-12-16 16:17:59 1943

原创 Linux0.00内核为什么要自己设置0x80号陷阱门来调用write_char过程?

我一开始没注意这个问题,只是通过陷阱门觉得很绕弯子,为何不在3级用户代码里直接调用write_char,今天自己写程序想用call调用代码段,才发现了大问题。我写了类似于write_char的过程,代码如下:dividing_line: push %gs pushl %ebx pushl %ecx movl $1,%ecx/*输出1个'  '*/ movl $SCRN_SEL,%

2014-11-14 18:01:20 1163

原创 Linux0.00 ld链接时为什么加上-Ttext 0

​汇编程序会经过二次遍历,有些符号引用会被标记为可重定位,在编译好后他们的偏移值是其在代码内部的偏移值,即LC计数器的值,当载入内存运行时,由于起始加载地址会不确定,所以会在加载后把代码段所在的内存起始地址加到符号引用原有的偏移上,这就叫重定位。比如一个jmp abc会跳到代码段内部偏移10的地方,但是代码被加载到内存偏移1000,所以实际上那个abc标号偏移10的地方在实际的内存里面偏移是101

2014-10-31 21:21:34 1231

原创 Linux ELF格式文件解析之relocation和entry入口点,基于gas汇编语言视角

问题引入:Linux的elf文件一开始理解起来的确很难,有的人可能会去看《linkers and loaders》,这书的确好,但是没有详细的解释很多细节,尤其是从汇编语言视角。我读了这本书很多地方后还是不明白,然后我又读了IBM360计算机的汇编器设计文档,里面详解了二次扫描汇编器的设计原理,以及relocation概念。但这些依然解决不了我的疑惑,因为困扰我的是一个选项,即ld -Ttext=

2014-10-31 20:44:22 2555

原创 GCC 内联汇编约束字符"m"的用法

​首先是这么一段代码(例一)​:#includevoid main(){ char c; //int tmp; char *s="abcdefg"; asm("movb %1,%0\n\t" :"=d"(c) :"m"(*s)); printf("out:%c\n",c);}    ​这段代码运行后会出现什么结果呢?很显

2014-10-06 20:24:09 2785

原创 Linux下用C语言调用GAS汇编——综合实例

紧接上一篇博文,上篇写的是用GAS汇编调用C语言,这次讲用C语言调用GAS汇编。在内核编写中主要用的是前者,但是在日常程序优化中,主要用的是后者。还是同样的功能,实现两个数值的交换,把参数从C语言传递进汇编,再用C语言接收从汇编函数返回的返回值,返回值又分为普通整数返回值和字符串返回值。建立三个文件,分别为main.c、retstr.s、swapint.s。其中main.c是C

2014-10-05 12:01:18 1386

原创 Linux汇编GAS调用C语言函数实例

Blum的书上只讲了C语言调用汇编,没讲汇编调用C语言。我自己尝试了下。最终试验成功了,在此写出与大家分享。期间历经无数错误,无数异常,我不是醉了,而是跪了。。。好在最后好了。程序实现一个换值功能,在main.s里定义a=10,b=20,然后调用C语言函数把a,b换值。新建两个文件分别为main.s的汇编文件,还有pro.c的C语言函数文件。main.s的代码如下

2014-10-03 20:59:02 1654

转载 RedHat/CentOS发行版本号及内核版本号对照表

Redhat 9.0———————————————2.4.20-8RHEL 3 Update 8————————————2.4.21-47RHEL 4 ————————————————2.6.9-5RHEL 4 Update 1————————————2.6.9-11RHEL 4 Update 2————————————2.6.9-22RHEL 4 Upda

2014-08-31 11:02:14 4897

翻译 理解Linux和其他UNIX-Like系统上的平均负载

理解Linux和其他UNIX-Like系统上的平均负载         Linux,Mac以及其他UNIX-like系统都能显示出“load average”信息。这些数字告诉你,你系统的CPU、硬盘、以及其他资源的忙碌程度。他们看起来很难理解,但是要想熟悉他们其实非常容易。无论你是在用Linux桌面版还是服务器版,亦或是基于Linux的路由器固件、基于Linux或BSD的网络附属存储

2014-08-17 13:55:00 2509

原创 LFS最终幻想

LFS最终幻想昨晚又折腾了很久。妄图解决此问题,但还是不行,虽然一开始LFS直接没法引导,现在能引导了,但是现在一启动就卡住。grub选项选择LFS后,启动开始,先是出现VMware的这个提示然后点了确定就这样永远死机。2.JPG我Google搜了好久,看了大量的国外哥们写的东西,现在怀疑是sda和sdb这两块硬盘编号的问题,因为它们会不定期改变,sda与sdb会不

2014-08-09 11:24:25 1005

原创 LFS杂记

第六章注意这一章先检查root用户下$LFS是否指向/mnt/lfs从本章开始所有的操作都在root下,而非lfs用户!6.2.1mknod用于创建特殊类型的文件,例如设备文件详见百度百科6.2.2mount的--bind可以挂载目录mount -v --bind /dev $LFS/dev由于lfs分区每次磁盘号都不同,不再执行自动挂载,改为开机手动挂

2014-08-08 17:40:50 917

原创 LFS之(3)GRUB引导设置

LFS7.5-BOOK上前面写的很好,特么到了最关键的地方就蛋疼。尼玛,写的不明白。先来说说centos6.4的grub版本问题,搞了半天是0.97的,我还特么以为2.0的, 这俩版本的分区编号不同,2.0版本的分区编号从1开始,0.97的从0开始。当按照LFS手册把我机子搞崩了我就再也不相信他了,自己来。先研究了下grub。发现个十分蛋疼的问题,这硬盘的编号sda1,sda2以及

2014-08-08 17:31:14 1958

原创 LFS终结篇,总结

自8.1开始看LFS,前四章慢慢悠悠的看,读得很细,后来开始装临时工具链,第一个Binutils我认认真真把每个解释都看了,虽然不懂。第二个软件是GCC,我依然慢慢看完了各个配置参数解释。到了Glibc我看不下去了,看不懂。开始加速,略一遍没重点警告就直接复制命令到SSH。第五章一共装了31个软件,这是在8月6号完成的,全是重复的动作,解压,进去,make,安装,出来,删除目录。忙活了三小时终于完

2014-08-08 17:21:26 1381

原创 CentOS GRUB引导错误无法进入系统解决办法

本来想整个LFS试试,结果在最后关头设置LFS系统启动的时候挂了。其余的安装笔记没写多少,先来写写系统怎么挂的。在LFS之前就在想,万一把我宿主机挂了咋办,没想到真挂了。但我进行到LFS系统grub安装时,那LFS说明上说的也不明白,我做的也稀里糊涂。似乎把宿主机系统GRUB损坏了,重写了。结果LFS系统也没装好,重启后LFS进不去,宿主机系统就更别说了,根本没有宿主机进系统的选项。。。。

2014-08-08 14:37:13 3725

原创 CentOS 6.4 卸载与安装桌面

针对centos6.4。(其他版本软件包名字不同,未测试)如果没有桌面,如下安装先安装Xwindow软件组yum groupinstall “X Window System”再装桌面yum groupinstall “Desktop”好,完了。命令行下startx即可启动桌面。想让它开机默认进入桌面就改写/etc/inittab,启动等级为5.yum grouplist

2014-08-04 14:29:31 6911

原创 LFS之(2)建立新用户和新环境

本来想使用我的日常工作用户mirage,但是看到LFS-Book里建立了新账户还进行了各种设置,我也就建立了新账户,防止不小心搞破坏。建立新的group名为lfs,建立新用户lfs,groupadd lfsuseradd -s /bin/bash -g lfs -m -k /dev/null lfs-s 是指定默认的shell,不指定也行,反正默认都是bash-g 是

2014-08-04 08:56:14 1353

《Pro Git》中文版

使用git进行版本控制,这本算是很权威的。讲得非常全面。中文版的。值得一读。

2014-10-24

The Art of Assembly Language

The Art of Assembly Language国外网站下的。不要分了。 此书一千多页,堪称汇编语言编程大全。 这是DOS/16-bit edition 。

2014-05-06

UNIX环境高级编程 英文第三版 附带书内源码

因为2013年刚出,所以没有中文版。这本书一共有三个版本,分别是1992年、2005年和2013年。不断的更新了最新的内容而且保持原书的精神。 PDF是国外下载的,带书签,高清晰。源代码是APUE官网下载的。 资源来自网络,不要积分了。

2014-03-29

Linux tree命令源代码

Linux tree命令的源代码,国外网站下的

2014-03-27

Linux下实现黑客帝国的数字雨!

Linux下实现黑客帝国的数字雨!可以研究下源码

2014-03-08

用MATLAB实现遗传算法程序

用MATLAB实现遗传算法程序。 用MATLAB实现遗传算法程序

2014-03-08

高级Bash脚本编程指南 【英文版】

高级Bash脚本编程指南 【英文版】 带书签!免积分!

2014-03-07

操作系统精髓与设计原理 高清晰扫描版 带书签

操作系统精髓与设计原理(第5版)高清晰扫描版,还带书签。 因为70多兆,我的上传权限是60M,所以分卷了。 不过都不要积分。 这是第二部分! 这是中文版哈

2014-03-01

X-Scan-v3.3中文版 无毒

X-Scan-v3.3中文版 经验证无毒

2014-02-14

Dx9 SDK DirectShow开发

Dx9 SDK VC++6.0下,选择“工具”-“选项”-“目录” 将Dx9 SDK里面的incude和lib分别包含进去

2014-02-14

backtrack5 r3 中文指南

backtrack5 r3 中文指南.BT5R3是最好用的版本,这里提供一份中文指南。

2014-02-14

郝斌数据结构78讲附带源代码【高速下载地址】

郝斌数据结构78讲附带源代码【高速下载地址】

2014-01-25

Linux操作系统管理学习路线图

Linux操作系统管理学习路线图,三四个文档,希望对大家有点帮助。

2013-11-26

深入浅出MFC高清第二版 part2

比那些十几兆的清晰。分两卷。下载全了开始解压

2013-07-10

深入浅出MFC高清版第二版 part1

比那些十几兆的清晰。分两卷。下载全了开始解压

2013-07-10

C语言游戏编程

C语言游戏编程的基础丛书,讲的算是比较详细。

2013-06-03

TC图形编程详解

详细的介绍了TC的图形编程技术,内有截图,内容较为详细。毕竟现在将TC的书很少了。

2013-06-03

仿照TC文本编辑器

用C语言写的仿照tc界面的文本编辑器。用TC编写的,有些头文件VC++没有,所以不能在VC6下运行。

2013-06-03

空空如也

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

TA关注的人

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