032011
 

第三部分 登录环境

十三、基本登录环境

用户和登录信息保存在/etc/passwd文件中,现代的Unix系统,密码常以MD5形式储存在/etc/shadow中。
    /etc/passwd的格式
    登录名 密码 用户id 组id   用户全名  主目录      使用的Shell
    sean  :x  :1000  :1000 :seanluo :/home/sean :/bin/bash

配置文件 /etc/profile 保存的是全局或局部环境变量、PATH信息、终端设置、安全命令如umask和其他信息。

配置文件 $HOME/.profile 保存的是用户配置信息,PS1和PS2可以设置提示符的信息。

stty用于设置终端特性,使用stty -a可以查看当前终端配置。

十四、环境信息和Shell变量

定义变量
    最基础的可以使用 VAR_NAME="value" 的形式,注意等号两端不能有空格,否则将被shell理解为命令。
    扩展的检测和定义变量的方式有:
         ${var_name:=value}    如果未设置变量,则设置其值为value。
                 注意与下面var_name:-value的区别。
         
${var_name:+value}    如果设置了变量,则重设其值。如没有设置,则返回空串。
         ${var_name:-value}    如果未设置变量,则在表达式中出现变量时使用value,
              但是并不改变var_name的未设置的状况。注意,仅仅是临时使用value这个值而已。 
         ${var_name:?info}    如果未设置变量,则显示用户自定义的出错信息。

Continue reading »

022011
 

十、sed命令的使用

sed是stream editor的缩写,它是一个非交互式的流文件编辑器。一般适用于按行操作文本的情况。
它的用法是
    sed [选项] '[基本命令]模式[基本命令]' 输入文件

sed 的一些选项
    -n 只打印匹配行,如不指定,则默认打印所有行。
    -f 从一个sed脚本文件获得指令
    -e 使用多个命令,如
        sed -n -e '/music/p' -e '/music/=' a.txt 其中第一个命令打印匹配行,第二个打印行号。

sed的模式
    和一般模式相比,sed多了关于行号的匹配方式,数字即代表了行号,$代表最后一行。
        所以'1,$p'表示打印第一至最后一行;'3p'表示打印第三行。
    要匹配一般的模式,要用斜线括起来,'/never/p'
    混用行号和模式的情况
        x                 x为一行号,如1

Continue reading »

012011
 

第二部分 文本过滤

七、Unix下的正则表达式

Unix下的正则表达式居然并不统一,这让我感到很困惑,似乎不同的命令中正则表达式的格式还不相同,或许是我接触的还是太少吧,这个问题以后再考略一下。这里先简单写写。

^               只匹配开头
$               只匹配结尾,特殊的:^$匹配空行
*               该字符前的模式重复0到多次
+               该字符前的模式重复1到多次
?               该字符前的模式重复0或1次
[]              表范围,如[a-zA-Z]或[1-5]等
[^pattern]      表不匹配该模式,如[^a-zA-Z]匹配非字母型字符
\               转义字符
.               表单个任意字符
pattern\{n\}    该模式重复恰好n次,加反斜线是为了{}的正常使用
pattern\{n,\}   该模式重复至少n次
pattern\{n,m\}  该模式重复n到m次

Continue reading »

292011
 

为了浮云,关于ARM9的学习先暂停一下。其实课程还在继续,只是最近有了新的目标。

第一部分 Shell

一、文件和权限

文件类型
  -  普通文件
  l  链接文件
  d  目录文件
  p  管道文件
  s  套接字文件
  b  块设备文件
  c  字符设备文件

文件权限
  -rwxrwxrwx    文件类型,文件属主权限,文件属主缺省组权限,其他用户权限
  权限:r 读(04)  w  写(02)  x  执行(01) s 表示粘滞,通常意味着文件放在swap分区
  chmod  更改文件权限,chmod u+x g-w o-r filename 属主增加执行权限,组去除写权限,其他用户去除读权限
  也可用上面的八进制数代替,rwx 为7,rw- 为6,r– 为4,r-x 为5
  目录的权限优先于文件的权限,可以使用 chmod -R 递归操作目录
  chown  更改文件属主
  chgrp  更改文件属组
  umask  权限掩码命令 umask 0022 意味着拿走缺省组和其他用户的w权限 Continue reading »

222011
 

概况:

    手机:       三星T959

    ROM:        Bionix-v1.2.1
    穿越软件:   cmwrap-1.5.3
    SIM卡:      南京20元cmwap封顶卡

APN设置 只保留“中国移动彩信设置”

  • 名称:        中国移动彩信设置
  • APN:         cmwap
  • 代理:        10.0.0.172
  • 端口:        80
  • 用户名:      未设置
  • 密码:        未设置
  • 服务器:      未设置
  • MMSC:        http://mmsc.monternet.com
  • 彩信代理:    10.0.0.172
  • 彩信端口:    80
  • MCC:         460
  • MNC:         00
  • 身份验证类型:CHAP
  • APN类型:     Internet + MMS



CMWRAP设置:


  • 环境测试:           全部通过;如提示你不是使用的CMWAP,本软件无用,则应该去APN里面删除了cmnet接入点后再试。
  • 自动开启:           是
  • 限于HTTP:           否
  • 增强模式:           否
  • 代理仅用于CMWAP:    否
  • 代理服务器地址:     10.0.0.172
  • 代理服务器端口:     80
  • 是否启用DNS穿越:    是
  • 高级DNS设置:
        –启用HTTP DNS解析:否
        –DNS服务器地址:   211.130.56.242

替换iptables:

  • 用附件的iptables文件替换 /System/bin/iptables 权限:rwxrwxr-x
使用方法:


  • 设置好APN
  • 下载CMWRAP(见附件)并安装
  • CMWRAP环境,成功后继续下一步
  • 替换iptables文件
  • 启用CMWRAP
  • 此时可能已经能够穿越,如不能,看下一步
  • 禁用CMWRAP
  • 杀掉所有进程,包括CMWRAP服务
  • 启动CMWRAP并启用
  • 穿越成功~

152011
 

 

8.预定义变量和内置变量
 
ARM汇编器对ARM的寄存器进行了预定义,所有的寄存器和协处理器名都是大小写敏感的。预定义的寄存器如下:
·R0~R15和r0~r15;
·a1~a4(参数、结果或临时寄存器,与r0~r3同义);
·v1~v8(变量寄存器,与r4~r11同义);
·sb和SB(静态基址寄存器,与r9同义);
·sl和SL(堆栈限制寄存器,与r10同义);
·fp和FP(帧指针,与r11同义);
ip和IP(过程调用中间临时寄存器,与r12同义);
·sp和SP(堆栈指针,与r13同义);
·lr和LR(链接寄存器,与r14同义);
·pc和PC(程序计数器,与r15同义);
·cpsr和CPSR(程序状态寄存器);
·spsr和SPSR(程序状态寄存器);
·f0~f7和F0~F7(FPA寄存器);
·s0~s31和S0~S31(VFP单精度寄存器);
·d0~d15和D0~D15(VFP双精度寄存器);
·p0~p15(协处理器0~15);
·c0~c15(协处理器寄存器0~15)。 

        ARM汇编器所定义的内置变量如下表所示。值得注意的是内置变量的设置不能用SETA、SETL或SETS等指示符来设置,只能用表达式或条件来设置。例如:
        IF  {ARCHITECTURE} = “4T” 
内置变量
内置变量
 
 
9.子程序调用规则
 
        ARM9处理器的子程序调用指令有别于Intel X86的子程序调用指令CALL,此小节再对这一特点进行归纳。另外,本小节还将介绍C或C++语言编写的程序与汇编语言编写的程序之间相互调用的规则。 
        程序设计时,通常会把完成某个特定功能的一段程序代码编写成子程序,在需要的地方进行调用。ARM9汇编程序中,使用下面语句调用子程序。
        BL  next
        其中,next为子程序中的第一条指令代码的标号。

        任何一个子程序进入前,处理器需要保存主程序中的现场,即需要保存当前工作寄存器(注意:当采用了子程序嵌套调用时,应该保存LR寄存器)。汇编指令BL的功能是将BL指令的下一条指令地址放到LR寄存器中,作为返回地址。并将子程序的第一条指令地址赋予PC寄存器,实现程序转移,即进入子程序执行。子程序执行完后,通过把LR寄存器值赋予PC寄存器,实现返回。
 
 
10.C语言与ARM汇编相互调用的一个例子
#include <stdio.h>
void test_example1(char * s1,const,char *s2);
 
int main(void)
{
         const  char  *string1 = “test example”;
         char   s[20];
         _asm
         {
         MOV  R0,string1
         MOV  R1,s
         BL   test_example1,{R0,R1}
         }
return  0;
} 
void test_example1(char * s1,const,char *s2){
          int  a1;
          _asm
          {
loop:
#ifndef  _thumb
         LDRB  a1,[s1],#1
         STRB  a1,[s2],#1
#else
         LDRB  a1,[s1]
         ADD   s1,#1
         STRB  a1,[s2]
         ADD   s2,#1
#endif
         CMP   a1,#0
         BNE   loop
         }
} 
        上面一段用C语言编写的程序中内嵌了汇编程序。例子中,test_exampl是一个子程序(函数),主函数是main()。main函数和test_example函数内部各嵌入了一段汇编语言编写的程序,该程序完成的是一个字符串的拷贝。  

142011
 

七、ARM9汇编指令系统

1.概述。

        32位ARM指令集由13种基本指令类型组成,分成4大类。
3种类型的存储器访问指令,用于控制存储器和寄存器之间的数据传送。第一种类型用于优化的灵活寻址;第二种类型用于快速上下文切换;第三种类型用于交换数据。
3种类型的数据处理指令,使用片内的累加器(ALU)、桶形移位器和乘法器,对31个寄存器完成高速数据处理操作。
4种类型的分枝指令,用于控制程序执行流程、指令优先级、ARM代码和Thumb代码的切换。
3种类型的协处理器指令,专用于控制外部协处理器。这些指令以开放和统一的方式扩展了指令集的片外功能。 上述句法形式中所用到的符号意义如下:

 
2.存储器访问指令

        (1) LDR和STR —字和无符号字节32位字8位无符号字节(B)加载寄存器(LDR)和存储寄存器(STR)指令。字节写时是用“0”扩展到32位。

LDR和STR指令都有以下4种句法形式:
op  {cond}  {B}  {T}  Rd,[Rn]                              零偏移
op  {cond}  {B}  Rd,[Rn,Flexoffset]  {!}          前索引偏移
op  {cond}  {B}  Rd,label                                   程序相对偏移
op  {cond}  {B}  {T}  Rd,[Rn],Flexoffset  {!}   后索引偏移

op      操作码,后面所用时意义相同。在此代表LDR和STR。
cond  可选条件码,条件码必须是下表中所列的一种。后面所用时意义相同
142011
 

五、ARM9的中断和异常

1.什么是异常:
        只要正常的程序流程被暂时停止,则异常发生。或者说,异常是由内部或外部产生一个引起处理器处理的事件,例如,外部中断或处理器执行一个未定义的指令都会引起异常。在处理异常之前,处理器状态必须保留,以便在异常处理程序完成后,原来的程序能够重新执行。同一时刻可能会出现多个异常。 

2.ARM9支持的异常类型
        ARM支持7种类型的异常处理,如下表。异常出现后处理器强制从异常类型所对应的固定存储器地址开始执行程序,这些存储器地址称为异常向量(exception vectors)
arm9异常
(1)复位:处理器上一旦有复位信号输入,ARM处理器立刻停止执行当前指令,复位后,ARM处理器在禁止中断的管理模式下,从地址0×00000000或0xFFFF0000开始执行程序。
012011
 

极客观察:体验极差的中国互联网产品与现象

来源:http://www.geekpark.net/entity/view/97373

越来越多网民知道"用户体验"这个词,虽然他们可能并不完全了解用户体验所包含的内容,但至少,他们能告诉你,他们觉得怎样才好,怎样是不好的。

Web1.0时代不同的是,Web2.0时代网站百花齐放,用户不只有一个选择,相反,用户有很多选择。如果一个网站的用户体验做得非常差--除非用户必须使用这个网站--否则用户将会慢慢离开。

这期极客观察就抛弃以往只称赞不批评的风格,尝试分析中国互联网上用户体验极差的一些产品、服务和现象。

一、别这么繁琐行不行?

当我们的观察员在各个微博问他的关注者,"你认为中国互联网体验极差,但有时不得不用的5个网站/软件/手机应用是?",得到的回复里,几乎每个都包含了"支付宝"。甚至,有的人连续回复了5"支付宝"

支付宝是国内使用率最高的支付服务,它的用户体验之所以差,很大程度上是因为用户完成一次支付要花费相当大的成本。我们来模拟一次使用过程:

1、用户A想在淘宝上购买价值3000元的商品,他发现自己的帐号没钱,于是打电话让用户B从支付宝里给他转账3000元。

2、用户B在苹果电脑Mac系统下用Firefox浏览器打开支付宝,准备登录,却无法输入密码,提示要安装安全控件。这时,因为安全控件只有Safari浏览器的版本,他必须更换浏览器。

安全控件

3B关掉了Firefox,打开了Safari,重新打开支付宝网站,在登录框的地方点击下载了安全控件,安全控件提示他要重启浏览器,于是他重启了Safari

4B终于登录了支付宝,他找到了"我要付款"按钮,准备给A打款。 Continue reading »

012011
 

这学期开了一门课,嵌入式系统与普适计算,刚好在实验室能用得到,一边学习一边做个笔记吧。

一,什么是嵌入式系统?
传统的嵌入式系统定义是:嵌入式计算系统是嵌入在其他设备中,起智能控制作用的专用计算机系统。 目前流行的嵌入式系统定义是:嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。

二、嵌入式系统的特殊要求
1、实时性
2、功耗
3、低成本
4、环境相关性

三、嵌入式系统开发的层次
一种是与硬件相关的设计,包括根据需要来组织系统的架构、硬件的初始化、底层引导代码的编写和操作系统移植等等。 再一种则是嵌入式平台的应用程序开发,比如在搭载了某种操作系统的嵌入式硬件上编写应用程序。

四、ARM9嵌入式系统体系结构

ARM9系列微处理器是低功耗的32位RISC结构,最适合要求低成本、低功耗的消费类应用产品,是目前应用最广泛、高性价比的嵌入式处理器。国际许多著名的IT芯片制造公司,基于ARM9处理器核生产了多种微控制器芯片,如三星公司的S3C2410、Atmel公司的AT91RM9200、Intel公司的PXA255、Motorola公司的MC9328、Cirrus Logic公司的EP93XX系列、等等。

 

ARM9体系结构