自信人生两百年,会当水击三千里!
  • 佛教禅宗 六祖慧能

    慧能 (公元 638 年- 713 年),俗姓卢氏,唐代岭南新州(今广东新兴县)人,父亲名卢行瑫,早逝,母李氏,其籍贯为范阳(今北京大兴) , 因其父贬于岭南才南迁。慧能生于贞观,圆寂于开元初年,经历了唐朝太宗、高宗、中宗、睿宗、武周 ( 武则天 ) 、中宗、恭宗、睿宗、玄宗八位国君阶段。自幼以卖柴为生,因一次卖柴回家的路上听到有人读诵《金刚经》,便萌生学习佛法之念;后去湖北的黄梅山拜谒佛教禅宗五祖弘忍大师为师,由此开始了学佛生涯。其时弘忍年事已高,急于传付衣法,遂命弟子作偈以呈,当时大弟子神秀也是大家公认的禅宗衣钵的继承人,为了避嫌半夜起来,在院墙上写了一首偈子曰:

           “身是菩提树,心如明镜台,

             时时勤拂拭,莫使惹尘埃。”

    弘忍认为神秀还没有完全顿悟。

    惠能当时做砍柴、碾米,听说这件事之后慧能就叫人带他去看偈子,听后亦诵一偈,因为自己是不会识字不会写字,并请当时在场的江州别驾张日用代劳题于壁上:

           “菩提本无树,明镜亦非台,

             本来无一物,何处惹尘埃。”

    弘忍见后,当众用鞋把慧能的偈搽掉,并说“亦未见性”。次日,弘忍大师来到碾米房,以杖击碓 ( 捣米器具 ) 而去;惠能立刻理解了五祖的意思,于是他在当晚上三更的时候去了弘忍的禅房。弘忍为其宣讲《金刚经》,并传衣钵,定为传人。然后为了防止有人伤害惠能,让惠能连夜逃走。于是惠能连夜远走南方,隐居 10 年之后才出来讲经传法。

    676 年,唐高宗仪凤元年,正月初八到广州法性寺,印宗法师在该寺内讲《涅槃经》之际,正好遇到风吹幡动,一僧曰:风动;一僧曰:幡动;争论不休,惠能进曰:

           “不是风动,亦非幡动,仁者心动”。

    印宗闻之折服,遂拜为师,并为之剃度。

    仪凤二年 (677 ) ,韶州刺史韦璩仰其道风,率同僚入山请惠能入城曹溪宝林寺(今广东韶关南华寺),于大梵寺讲堂为众说法,兼授无相戒。僧尼道俗集者千余人,门人法海编录其法语。慧能在此弘扬禅宗传法长达 37 年,奠定了禅宗“南宗”的基础。

    神龙元年 (705 ) ,武则天和唐中宗即遣内侍薛简往曹溪召其入京。惠能以久处山林,年迈风疾,辞却不去。薛简恳请说法,将记录带回报命。中宗因赠摩纳袈裟一领及绢五百匹以为供养。并命改称宝林寺为中兴寺,由韶州刺史重修,又给予法泉寺额,并以惠能新州故宅为国恩寺。

    延和元年 (712 ) 惠能回至新州,命门人建报恩塔。唐玄宗先天二年( 713 年),圆寂于新州国恩寺,世寿七十六,唐宪宗谥号大鉴禅师。惠能圆寂后,其真身不坏,被运回韶州(今广东韶关)曹溪,其门人裹综涂漆,保持其生前形像。其肉身像至今还保存在南华寺,供奉在灵照塔中。

    南北宗之争

    惠能,主张“顿悟”,影响华南诸宗派,人称“南宗”,在曹溪宝林寺(今广东韶关南华寺)弘扬禅宗传法长达 37 年之久。六祖惠能的同门师兄神秀,主张“渐悟”,在华北势力颇盛,号称“北宗”。

    唐玄宗开元二年( 730 年),在河南滑台(今滑县)的无遮大会上,惠能弟子荷泽神会辩倒了神秀门人崇远、普寂,使得“南宗”成为中国禅宗正统。

    惠能为禅宗的发展奠定了理论基础,对于后来各派禅师建立门庭,影响极大。在他死后,他的弟子传承禅法,形成惠能禅法的南北二宗。惠能禅法的北宗即是荷泽神会门下,称荷泽宗。惠能禅法的南宗则以南岳怀让门下的洪州宗,与青原行思、石头希迁一系的石头宗为代表。

    惠能禅法在北宗荷泽一派的推动下,取代了原先北宗神秀一系的地位,成为禅门正宗,但荷泽一派因后继无人,在唐末衰亡。对后世影响较大的反而是南宗门下。南宗门下,后来形成河北临济宗、江西曹洞宗、湖南沩仰宗、广东云门宗、江苏法眼宗五宗,即“一花开五叶”。

    后来,法眼宗远传于泰国、朝鲜;云门宗、临济宗更远播欧美。在中国、日本,则是临济宗、曹洞宗两宗最盛。

    经典

    惠能圆寂后,其弟子 将其经历和言论录整理成《六祖坛经》,简称《坛经》,是禅宗的经典。

    著名弟子

    弟子众多,最著名的有:荷泽神会、青原行思、南岳怀让、石头希迁、净藏。

    禅宗

    禅宗,又称宗门,汉传佛教宗派之一,始于菩提达摩,盛于六祖惠能,中晚唐之后成为汉传佛教的主流,也是汉传佛教最主要的象征之一。汉传佛教宗派多来自于印度,但唯独天台宗、华严宗与禅宗,是由中国独立发展出的三个本土佛教宗派。其中又以禅宗最具独特的性格。禅宗祖师会运用各种教学方法,以求达到这种境界,这又称开悟。其核心思想为:

           “不立文字,教外别传;

             直指人心,见性成佛”。

    轶事

    《西游记》孙悟空学艺的故事可能取材于六祖慧能的学佛经历。  

     

  • 《老总小传》作者:马甲同志 http://blog.sina.com.cn/s/blog_5091b1dd0100c3nq.html

    以非常不传统的视角书写总司令的光辉历程。

    《非常轨迹——记中央红军长征中的四渡赤水抢渡金沙江之战》 作者:双石 http://zhoujun.blshe.com/category/349/9197

    以电报文和分析为基础,重现“四渡赤水”;

    时间,从1934年12月至1935年5月;

    地点,湘(湖南)、桂(广西)、黔(贵州)、川(四川)、滇(云南);

    中共参战部队:

    军委纵队,叶剑英、陈云;

    红一军团,林彪、聂荣臻;

    红三军团,彭德怀、杨尚昆;

    红五军团,董振堂、李卓然;

    红九军团,罗炳辉、何长工;

    游击队若干;

    KMT参战:

    中央军,薛岳;

    湘军,何健;

    黔军,王家烈;

    川军,刘湘;

    川军,刘文辉;

    桂军,李宗仁,白崇禧;

    滇军,龙云;

    地方民团若干;        

    《朱毛之争》 作者:双石 http://zhoujun.blshe.com/category/349/9689

    主要是叙述,分析发生在1929年6月的朱毛之争的前前后后,左左右右的一些事儿。

    《Ifuleu红色八卦系列:【井冈山】》作者: 双石 http://zhoujun.blshe.com/category/349/34826

    主要是叙述开始于1927年秋朱毛红军在井冈山的成长、战斗的事儿。

    《十大元帅的情缘》 作者:孔庆东 http://blog.sina.com.cn/s/blog_476da36101000axq.html

    《红军林彪》 作者:子金山 http://blog.sina.com.cn/s/articlelist_1256636234_10_1.html

    主要是叙述了林彪元帅从1927年南昌起义到1935年红军长征结束这一段时间内的战斗历程。

     

     

  • Android 初调试

    Android 平台开发,需要在一个模式或者真实的环境之下进行一下调试、验证,至少有三种方式:

    1.       Eclipse + AVD ,通过 Eclipse 或者 Android SDK 自带的命令行创建 Android Virtual Device ;

    2.       Eclipse + Android Device ,通过一个真实 Android 设备通过 USB 和电脑相连进行调试;

    3.       Eclipse + Android System over Virtual Machine ,在系统安装一个虚拟机软件,比方说: VirtualBox VmWare VirtualPC 等,然后下载一个 Android ROM 安装到虚拟机之中,配置虚拟机的网络和 Host 主机相连,然后在 Host 主机中通过 adb 命令 adb connect android-ip 连接虚拟机中的 Android 系统,然后就可以进行调试了。

    对于一些和 ROM 相关的开发、调试,最后现在虚拟机环境下进行调试,以免于把真实 Android Phone 给“砖头”了。

    Android 源代码下载和编译:

    1.       拥有 Ubuntu 系统,进入到 Ubuntu 系统;

    2.       安装 cURL 。什么是 cURL ,官方解释:支持很多协议: FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP curl 同样支持 HTTPS 认证, HTTP POST 方法 , HTTP PUT 方法 , FTP 上传 , kerberos 认证 , HTTP 上传 , 代理服务器 , cookies, 用户名 / 密码认证 , 下载文件断点续传 , 上载文件断点续传 , http 代理服务器管道( proxy tunneling , 甚至它还支持 IPv6, socks5 代理服务器 , 通过 http 代理服务器上传文件到 FTP 服务器等等,功能十分强大。下载地址: http://curl.haxx.se/download.html

    3.       安装 Git

    4.       建立 ~/bin 目录,将这个目录配置到环境变量 ~/.bashrc 里面: export PATH=~/bin:$PATH

    5.       安装 Repo ,通过命令: curl http://android.git.kernel.org/repo >~/bin/repo

    6.       改变 ~/bin/repo的权限: chmod a+x ~/bin/repo

    7.       初始化版本库: repo init -u git://android.git.kernel.org/platform/manifest.git -b froyo

    8.       同步 repo sync

    9.       make(make 的时候出错了,注意查看,极有可能是缺少系统库,根据错误提示安装 系统库即可 )

    10.   最后编译完的库文件,主要集中在 out\target 路径下面。例如编译后的 framework. jar 位置在 out\target\common\obj\JAVA_LIBRARIES\framework_intermediates\classes.jar

    并且可以参考:
    http://mintelong.iteye.com/blog/466893
    http://www.williamhua.com/2009/04/29/
    http://source.android.com/source/build-numbers.html

    ubuntu 下使用 Eclipse+VirtualBox 进行 Android 开发:
    1.
    安装 Sun JDK;
    2.
    安装 Eclipse + Android plugin;
    3.
    安装 Android SDK for linux, 配置 adb 的所在目录到 path 中;
    4.
    下载 Android 源代码并且编译;
    5.
    安装 virtualbox;
    6.
    下载到开发版本的 android rom iso 文件 ;
    7.
    virtualbox 中创建一个虚拟机,将 iso 加载到虚拟机的光盘中,将 android rom 安装到硬盘中,在安装过程中选择 /system 目录为 read-write ,并且创建 sdk 虚拟卡。 android 自动将其挂在到安装后的 /sdcard 路径 ;
    选择虚拟机的网络方式是 :bridged adapter ,虚拟机的操作系统会自动从 ubuntu 一样,从外部路由器中获取一个独立的 ip ,可以和 ubuntu 互通,也可以通过路由器上网。
    8.
    登录到虚拟机中的 android 系统,通过 devtools 应用的子项 Terminal simulator 进入到命令行界面,通过 ip addr 看到本机的 ip(android-ip).
    9.
    ubuntu 的命令行中: adb connect android-ip
    10. 
    进入到 Eclipse 中,模拟器可以选择 AVD 调试 app 开发,也可以选择 manual 方式到虚拟机中的 android 环境进行开发。 Eclipse 调试环境自动将 apk 发布到虚拟机 Android 的目录 /system/app 下。 .
    11. 
    ubuntu 下,鼠标在 ubuntu 和虚拟机之间切换的快捷键:键盘中的 ctrl + i 就可以了。

     

  • 先装xp,再装ubuntu

    1.分别按着XPubuntu的方法一次安装即可,安装之后系统grub默认就会有ubuntu/xp的启动选项;每次启动系统的时候会有选项可以选择。
    先装ubuntu,再装xp

    1.       按着ubuntu的方法安装ubuntu

    2.       启动系统,安装xp后,自动清除系统grub,如果系统命令行引导或者grub引导界面,找到win pe光盘从光盘启动进入win pe,下载clear mbr软件clsmbr进行清除;

    3.       重启系统,使用xp安装盘安装xp

    4.       安装XP之后系统启动ubuntugrub选项丢失;

    5.       通过ubuntu live cd或者启动盘进入ubuntu

    6.       查看ubuntu所在分区的盘符的uuid,比方说我的现在是:xxxxxxxxxxxxxxxxxx(可以直接在ubuntu所在分区盘符上面的图标查看属性得到,也可以通过命令ls -l /dev/disk/by-uuid获得)

    7.       ubuntu使用命令:sudo grub-install --root-directory=/media/{uuid} /dev/sda命令执行成功之后,会有提示:"Installation finished. No error reported."

    8.       重启机器,进入grub界面,这时候恢复了ubuntu下面的grub启动界面。这时候你发现xp的启动选项可能不工作,别着急。

    9.       按键c进入grub的命令行界面,键入root (hd0,之后按键tab键。这时候注意查看,在xp的分区信息中有一个uuid,记下来uuid,然后quitubuntugrub启动界面。选择 xpgrub项,然后按键e,进入编辑模式,把记下来的uuid替换原来的uuid.这只后F10就可启动xp了。

    10.   其实也可以不操作第9步,直接从ubuntu grub登录进入ubuntu系统,然后编辑:/boot/grub/grub.cfg文件,将xp启动项中的uuid替换成新的xp系统的uuid即可。我的修改之后的内容为:
    insmod part_msdos
    insmod ntfs
    set root='(/dev/sda,msdos1)'
    search --no-floppy --fs-uuid --set=root 0E48A65048A6367D
    drivemap -s (hd0) ${root}
    chainloader +1

    11.   OK一切搞定。

    另可参考:http://www.blags.org/windows-xp-disk-to-install-ubuntu-10-04/

     

  • Android 通用架构

    Android 有一个通用的展示软件栈的架构,即是如此图:


    简单介绍:

    Applications 层:主要是 Android 自带的 GMS(Google Mobile Service) 应用和应用开发者开发的应用;

    Application Framework :主要是为 Application 开发者提供各种功能、服务和开发 API

    Android Runtime(Core libraries and Dalvik Virtual Mache) :为应用运行提供运行环境的 Java 虚拟机和运行时库。

    Libraries :主要是 Android 系统运行库和工具集;

           C/C++ 库:

    a)       标准 C/C++ bionic BSD 许可证,可以修改而无需公开源代码。提供 C/C++ 标准库绝大部分的功能,是一个专为嵌入式系统设计的轻量级标准库实现。相对于传统的 glibc ,其体积和内存占用很小。

    b)      C 语言工具库 libcutils :是 Android 系统中的基石库,基本上 Android 中所有的本地库和程序都链接了这个库。

    c)      init 进程:此进程是 Android 设备启动后,系统执行的第一个用户空间的可执行程序,由内核缺省直接启动,以守护进程的形式后台运行。提供以下功能:设备管理、解析并执行初始化脚本 init.rc

    d)      shell 工具: sh toolbox busybox

    e)       C++ 语言工具库 libutils :属于 Android 的底层库。以 C++ 实现,提供的 API 也是 C++ 接口规范。提供基本头文件、 Binder 框架以及使用 Binder 机制的相关库。

    通过 Android 应用程序框架为开发者提供服务的 C/C++ :

    a)       系统 C 库:一个从 BSD 继承来的标准 C/C++ 系统函数库, 是专门为基于嵌入式 Linux 系统的设备定制的。即 bionic libc 库。

    b)      媒体库:基于 PacketVideo OpenCORE 。该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。编码格式包括 MPEG4, H.264, MP3, AAC, AMR, JPG, PNG

    c)      Surface Manager :对显示子系统的管理,并且为多个应用程序提 供了 2D 3D 图层的无缝融合。

    d)      LibWebCore :一个最新的 web 浏览器引擎用,支持 Android 浏览器和一个可嵌入的 web 视图

    e)       SGL - 底层的 2D 图形引擎

    f)       3D libraries :基于 OpenGL ES 1.0 APIs 实现;该库可以使用硬件 3D 加速(如果可用)或者使用高度优化的 3D 软加速。

    g)      SQLite :一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎。

    系统工具集 :

    a)       主要以 busybox 为主,链接 bionic libc 库,为大多数嵌入式 Linux 所采用。主要包含一些系统管理工具,全为文本命令行工具。

    b)      另外 Android 官方也提供了专门的调试守护进程,如 adbd 等。

    HAL :一个对硬件访问虚拟化的中间抽象层,接着我们详细介绍;

    Linux Kernel :基于开源 Linux kernel 经过修改的支撑整个软件栈的基础操作系统内核,当前主要是依赖于 Linux kernel 2.6 。驱动主要分为两类,一类是 Android 专用驱动,其并不是硬件驱动,而主要是一些为上层提供服务的辅助功能层,比如 ashmem logger binder power manager ;另一类则是设备驱动则,其多是硬件驱动,属于 Linux 内核标准的驱动,比如 fb 显示驱动 (LCD) 、输入设备驱动 ( 游戏杆、鼠标、键盘、触摸屏 ) 、视频驱动 (Camera) 、音频驱动、 MTD 存储设备驱动、网络驱动 ( 蓝牙、 WiFi Ethernet) 等。驱动在内存映射的时候也分为 kernel space user space ,放在 kernel space 都是需要遵循 GPL 开源的;放在 user space 中的驱动,是遵循 Apache/MIT 许可证的,可以不开源,其运行在 kernel space 之上。

    Hardware Abstraction Layer:

    HAL Google 为了解决 Linux 开源许可证 GPL Android 本身的 Apache 许可证冲突的一个硬件抽象层,主要原则是把控制硬件的动作都放到了 Android HAL 中,而 linux driver 仅仅完成一些简单的数据交互作用,甚至把硬件寄存器空间直接映射到 user space

    HAL 存在的原因:

    1.       快速适配硬件设备中非 linux kernel 标准的接口;

    2.       解决 Linux 开源许可证 GPL 与硬件设备厂商驱动的专利不兼容;通过 Android Apache 许可证和 HAL 技术实现来解决这一难题;

    3.       开放的满足设备厂商开发开与之驱动对应的特定需求的要求;

    HAL 层具备如下特点:

    1.       在用户空间 (user space) 而不是内核空间 (kernel space) ,可以是 c/c++ 库;

    2.       Android platform 部分和系统硬件完全的进行了隔离开;

    3.       向上层提供 Android platform 操作硬件的接口,向下要求硬件驱动对其功能进行实现; ( 比方说上层应用对于 Graphics, Audio, Camera, Bluetooth, GPS, Radio(RIL), Wifi 等的操作。 )

    在编程方式上,上层应用通过 HAL 对硬件的操作有两种方式:

    1.       通过 Java->JNI->*.so (c/c++)


    2.       通过 Java app->ApplicationManager->Service(java)->service(jni)->HAL->HAL stub->System Call 方式进行调用;


    注:一般 HAL 动态库放在位置 /system/lib/hw 目录。

    一般开发类型

    1.       Android 手机产品:构建硬件系统,移植 Android 软件平台系统;主要涉及设备驱动程序,以及在硬件抽象层实现标准接口等。


    2.       Android 应用程序:基于 Application Framework 和其他应用,开发应用程序;

    3.       Android 系统开发:主要是增强或者完善 Android 平台系统的功能,开发中主要包含如下部分:

    a)         开发 c 或者 c++ 库;

    b)        定义将要通过 JNI 提供的上层 Java 的系统 API 接口;

    c)        封装 JNI

    d)        通过 JNI 封装 Java 类和接口 API ,提供给 Android 应用使用;

    Android 开发社区

    Cyanogenmod 社区: http://www.cyanogenmod.com/

    涉及开发语言: C/C++/Java 等。