Linux内核开发环境 2015年06月01日 kernel

    Linux基于UNIX开发,UNIX在1969年由Dennis Ritchie和Ken Thompson两位大师开发。 Linux最早由Linus Torvalds于1991年开发。整个Linux系统由系统调用将用户空间和内核空间联系起来,用户通过系统调用来进入到内核态,以完成对设备的访问和控制。因此从功能上讲,内核主要是为用户提供接口,对计算机硬件资源进行管理。

    Emacs Introduction 2015年05月30日 editor

    sudo apt-get build-dep emacs24
    sudo apt-get install ttf-ubuntu-font-family ttf-wqy-microhei
    wget http://mirrors.ustc.edu.cn/gnu/emacs/emacs-24.5.tar.gz
    tar -xzvf emacs-24.5.tar.gz
    cd emacs-24.5
    ./autogen.sh
    ./configure
    make && sudo make install
    

    Emacs Orgmode 2015年05月29日 editor

    Org mode是Emacs下写文档的一个主模式,非常适用于记笔记、写TODO、制定项目计划等。自从接触Orgmode之后,我便没有离开过,因为她给我带来了太多的便利。

    从观感上看,她是一个非常紧凑的标记语言,相比于RST看起来不是那么稀疏。即便是不导出为文档或者页面,也能很好的阅读和跳转。

    在书写上,她提供了一组很自然的快捷键,很多文字对象具有相似的结构,在快捷键上也很好的保持一致,如章节和列表的很多快捷键是相同的,功能则完全能够类比。

    作为程序员,文学编程让我十分着迷。在文档里引用一段代码,一个简单的按键就能计算结果,这是多么优美的设计。比如可以直接在文档中写一段Python,验证一个小的算法,也可以写一段plantuml,直接接绘制流程图,还可以用表格直接绘制gnuplot图形,其他的很多语言如C语言、R语言等等都是能够直接运行的,你根本不需要去写Makefile,也不需要输入冗长的编译命令,而只需要一个简单的按键。

    另外不得不提的就是其优秀的时间管理能力,很大的提高了我的工作效率。

    Linux嵌入式平台工具 2015年05月23日 linux

    Linux下tftp工具用如下方式启动。

    tftp [OPTONS] [IP [PORT]]
    

    进入会话之后基本命令如下。

    connect IP [PORT]
    连接IP
    binary
    二进制模式传输
    ascii
    文件传输模式,默认采用文本模式
    verbose
    显示详细处理信息
    status
    显示当前状态信息
    trace
    显示调试信息
    rexmt retransmission-timeout
    设置重传输的超时时间
    timeout total-transmission-timeout
    设置包传输超时时间
    get FNAME
    获取文件
    put FNAME
    发送文件
    help/?
    帮助信息
    quit/q
    退出

    GDB Introduction 2015年05月22日 tools

    GCC将C代码编译成可执行程序,会执行预处理、编译、汇编和链接四个步骤。预处理包含头文件,替换宏定义。编译是由C代码生成汇编程序。汇编则是将汇编程序转换为目标二进制文件。链接是把目标文件和库链接在一起,生成一个可以运行的程序。

    Linux网络工具 2015年05月21日 network

    wpa_supplicant是一个发送WPA请求的工具,WPA是Wi-Fi Protected Access的简称。用于在Linux、MAC、Windows上支持WPA和WPA2(IEEE 802.11i / RSN)。不论是在桌面应用还是嵌入式设备都是一个实用的工具。该工具设计为一个daemon程序,支持两个前端,wpa_cli是文本界面,wpa_gui是图形界面。

    Linux磁盘工具 2015年05月20日 linux

    FIO的简称是flexible I/O tester,能够创建一定数量的线程以实现特定的IO操作。 FIO是一个命令行工具,命令格式为:

    fio [options] [jobfile]...
    

    选项不是很重要,重要的是jobfile,jobfile遵循"ini"格式,实际上就是每一行包含一个参数和一个值。一个jobfile可以包含很多组,组名放在方括号中。以分号或井号开头作为注释符。

    还有一个关键字叫global,一个jobfile可以有多个global组,每一个组只会受到上层中最接近的global影响。

    排序算法 2015年05月17日 algorithm

    堆排序是设计非常巧妙的排序,堆是一个数组,展开为树结构之后保证上一层元素比下一层元素大。

    堆排序最巧妙的函数是max_heapify(),需要注意这是一个递归函数,它将一个不合法的值插入到根节点,前提是左右子堆都是合法的堆,通过递归交换,把不合法的值传递到合法的位置,时间复杂度为O(lgn)。这个函数被两次利用,建堆的时候用一次,排序的时候调用一次。建堆时从下往上构建,排序时从上往下取出最大值。

    算法习题1 2015年05月10日 algorithm

    1. 给定一个字符串,确定其中是否每个元素都只出现了一次。
    2. 编写一个程序,删除字符串中所有的重复出现的字符,只需删除重复部分。
    3. 判断两个字符串是否为变位词,所谓变位是指可以只通过调整字符位置让两个字符相同。
    4. 判断一个字符串是否是另一个字符串的广义子串。即是否可以通过对另一个字符串删除字符得到。
    5. 给定一个函数is_substring(s1, s2)用于判断s1是否为s2的子字符串,仅使用该函数如何确定两个字符串是否可以通过循环移位使其相同。
    6. 给定一个整数数组,每个元素独一无二,请计算能够排列成连续数字的子数组的最大长度。
    7. 给定一个 \(N \times N\) 矩阵,将其顺时针旋转90度。
    8. 给定一个 \(N \times N\) 矩阵,如果一个元素为0,将其所在的行和列都置0。