Bsh 特殊变量

bsh具有几个特殊的变量,记录以备查阅:

$#    --    脚本参数的个数

$?     --    最近管道的退出状态,零为执行成功

$-      --    shell set指令设置的环境变量

$$     --    shell脚本的进程号,子shell进程号?

$!      --    shell脚本中最近后台执行的程序进程号,或者最近管道指令的进程号。

$*      --    传递给当前进程的参数,当置于一双引号中时展开为单一参数(一字符串)。

$@     --   传递给当前进程的参数,当置于一双引号中时各自展开为单独的参数(多个字符串)。

$0      --    shell简本自身名字,相当于C中的argv。

$[1-9]     --   shell脚本参数,相当于C中的argv + [0-9]。当大于9时需要用括号括住。

Posted by jc 2012年4月16日 05:15


ARM 寄存器(综述)

    ARM有R0-R15共16个通用寄存器和一个程序状态寄存器CPSR。在ARM处理器的不同模式下,这些寄存器对于用户来讲是有着不同的视图的,详见下图:

图1-1

    Banked Register的意思是“备份寄存器”,也就是说当处理器由User mode切换到FIQ mode时,R0-R7需要入栈保存,而R8-R14则不需要。因为在FIQ mode,R8-R14使用的是物理上不同的寄存器,标记为R8_fiq。这种设计是为了提高处理器在不同模式间切换的效率,从图中可以看到有那些寄存器有Banked Register的存在。

    R0-R15 General-purpose Register “通用寄存器”也不尽然是“通用”,从硬件和软件的约定上,不同的寄存器有不同的作用。

    从硬件上看,R15作为为Program Counter(pc)使用。因为ARM为流水线设计,PC所指向的指令并不是当前处理器正在执行的,据ARMv6手册讲,PC指向当前正在执行指令的后第二条指令。R14作为Link Register(lr)使用,它在跳转指令执行后会保存跳转指令的下一条指令的地址。主要用于子程序的调用和从异常中返回。这里讲的硬件约定,是指此两个寄存器中的数值是在处理器运行的过程中根据执行不同指令自动写入的。而下面讲到的软件约定则是软件上一种约定俗成的用法,大家都如此使用最终也就形成一种规范1

    R13作为Stack Pointer(sp)使用,在系统初始化时会将堆栈地址存入R13。

    CPSR(Current Program Status Register)中各字段的意义如下:

图1-2

    bit[4:0]显示处理器当前的模式:

    User     (usr)    0b10000    

    FIQ      (fiq)    0b10001    

    IRQ      (irq)    0b10010    

    Superisor(svc)    0b10011    

    Abort    (abt)    0b10111    

    Udefined (und)    0b11011    

    System   (sys)    0b11111    

    通常,将出User之外的模式称之为特权模式(Privileged Mode),而除User和System之外的模式又称之为异常模式(Exception Mode)。System模式是设计为运行操作系统任务的。User模式不能自主的进行模式的切换,除非异常条件的产生促使处理器进入异常模式。而特权模式可以自由的切换到另一种模式中。

    I位指示IRQ的状态,当写入1时禁止IRQ。F位指示FIQ的状态,当写入1时禁止FIQ。T位指示当前处理器当前为执行Thumb指令集还是ARM指令集。ARM处理器使能够执行32位和16位两种指令集的,当然Thumb和ARM指令集是相似的。

 

1. 参考《Procedure Call Standard for the ARM Architechitecture》

Posted by jc 2011年8月21日 04:09


linux 内核代码组织结构

linux-2.6.28.6

real6410 board

 0. source "init/Kconfig" 

      |

      +-- source usr/Kconfig

      |
      +-- source arch/Kconfig
      |
      +-- source block/Kconfig
 
source "kernel/Kconfig.freezer"
 
 
1. arch/arm/Kconfig
 
config ARCH_S3C64XX == y
    bool "Samsung S3C64XX"
    select GENERIC_GPIO
    select HAVE_CLK
 
2. source "arch/arm/plat-s3c64xx/Kconfig" in plat-s3c64xx/Kconfig
 
dev-uart.c devs.c
cpu.c
irq.c
irq-eint.c
irq-eint-group.c
clock.c
gpiolib.c
bootmem.c
 
config PLAT_S3C64XX == y
    bool 
    depends on ARCH_S3C64XX
    select PLAT_S3C -->arch/arm/plat-s3c/Kconfig -->3
    select ARM_VIC -->arch/arm/common/Kconfig:4 -->arch/arm/common/vic.c
    select NO_IOPORT -->arch/arm/Kconfig:56
    select ARCH_REQUIRE_GPIOLIB -->drivers/gpio/Kconfig:15 -->drivers/gpio/gpiolib.c
    select S3C_GPIO_TRACK -->arch/arm/plat-s3c/Kconfig:123 ->arch/arm/plat-s3c/gpio.c
    select S3C_GPIO_PULL_UPDOWN -->arch/arm/plat-s3c/Kconfig:129 ->arch/arm/plat-s3c/gpio-config.c
    select S3C_GPIO_CFG_S3C24XX -->arch/arm/plat-s3c/Kconfig:144 ->arch/arm/plat-s3c/gpio-config.c
    select S3C_GPIO_CFG_S3C64XX -->arch/arm/plat-s3c/Kconfig:150 ->arch/arm/plat-s3c/gpio-config.c
    select DMABOUNCE -->arch/arm/common/Kconfig:17 -->arch/arm/common/dmabounce.c
    default y
 
config S3C64XX_SETUP_I2C0 -->./setup-i2c0.c
    bool
    default y
 
config S3C64XX_DEV_FIMC0 -->./dev-fimc0.c
    bool
    default y
 
config S3C64XX_DEV_FIMC1 -->./dev-fimc1.c
    bool
    default y
 
config S3C64XX_SETUP_FIMC0 -->./setup-fimc0.c
    bool
    default y
 
config S3C64XX_SETUP_FIMC1 -->./setup-fimc1.c
    bool
    default y
 
config S3C64XX_DEV_RP -->./dev-rp.c
    bool
    default y
 
3. source "arch/arm/plat-s3c/Kconfig"
 
init.c
hr-time.c
clock.c
pwm-clock.c
gpio.c
gpio-config.c
 
config PLAT_S3C
    depends on ARCH_S3C2410 || ARCH_S3C24A0 || ARCH_S3C64XX || ARCH_S5P64XX || ARCH_S5PC1XX
    default y
 
config S3C_BOOT_ERROR_RESET -->arch/arm/plat-s3c/include/plat/uncompress.h:122
    bool "S3C Reboot on decompression error"
    depends on PLAT_S3C
 
config S3C_LOWLEVEL_UART_PORT -->arch/arm/plat-s3c/include/plat/uncompress.h:40
 -->arch/arm/plat-s3c64xx/sleep.S:25
 -->arch/arm/boot/compressed/head.S:58
    int "S3C UART to use for low-level messages"
    depends on PLAT_S3C
    default 0
 
config S3C_GPIO_SPACE ->arch/arm/mach-s3c6400/include/mach/gpio.h:47
    int "Space between gpio banks"
    default 0
 
config S3C_GPIO_PULL_DOWN ->arch/arm/plat-s3c/include/plat/gpio-cfg.h:91
    bool
 
config S3C_GPIO_PULL_UP ->arch/arm/plat-s3c/include/plat/gpio-cfg.h:92
    bool
 
config S3C_DEV_HSMMC (select by MACH_SMDK6410) -->./dev-hsmmc.c
    bool
    depends on PLAT_S3C
 
config S3C_DEV_HSMMC1 (select by MACH_SMDK6410) -->./dev-hsmmc1.c
    bool
    depends on PLAT_S3C
 
config S3C_DEV_HSMMC2 (select by MACH_SMDK6410) -->./dev-hsmmc2.c
    bool
    depends on PLAT_S3C
 
config S3C_DEV_I2C1 (not select by MACH_SMDK6410) -->./dev-i2c1.c (dev-i2c0.c included)
    bool
    depends on PLAT_S3C
 
config S3C_DMA_PL080 (select by MACH_SMDK6410) -->./dma-pl080.c
    bool
    depends on PLAT_S3C
 
config DYNAMIC_TIMER
    bool "Tickless and HR Timer"
    select GENERIC_TIME -->/drives/clocksource
    select GENERIC_CLOCKEVENTS -->kernel/time/tick-common.c
 
4. source "arch/arm/mach-s3c6410/Kconfig"
 
cpu.c
dma.c
irq.c
 
config CPU_S3C6410
    bool
    select CPU_S3C6400_INIT -->arch/arm/plat-s3c64xx/s3c6400-init.c
    select CPU_S3C6400_CLOCK -->arch/arm/plat-s3c64xx/s3c6400-clock.c
 
config S3C6410_SETUP_SDHCI (select by MACH_SMDK6410) -->./setup-sdhci.c
    bool
 
config MACH_SMDK6410
    bool "SMDK6410"
    select CPU_S3C6410
    select S3C_DEV_HSMMC
    select S3C_DEV_HSMMC1
    select S3C_DEV_HSMMC2
#   select S3C_DEV_I2C1
    select S3C6410_SETUP_SDHCI
#   select S3C64XX_SETUP_I2C1
    select S3C_DMA_PL080
 
config SMDK6410_SD_CH0 ->arch/arm/mach-s3c6410/mach-smdk6410.c:548
    bool "Use channel 0"
    depends on MACH_SMDK6410
 
config SMDK6410_SD_CH1 ->arch/arm/mach-s3c6410/mach-smdk6410.c:551
    bool "Use channel 0"
    depends on MACH_SMDK6410
 
5. source arch/arm/mm/Kconfig
 
6. source "arch/arm/common/Kconfig"
 
7. source "drivers/pci/Kconfig"
 
8. source "drivers/pcmcia/Kconfig"
 
9. source "kernel/time/Kconfig"
 
10. source "mm/Kconfig"
 
11. source "drivers/cpufreq/Kconfig"
 
12. source "drivers/cpuidle/Kconfig"
 
13. source "fs/Kconfig.binfmt"
 
14. source "kernel/power/Kconfig"
 
15. source "net/Kconfig"
 
16. source "drivers/base/Kconfig"
 
17. source "drivers/connector/Kconfig"
 
18. source "drivers/mtd/Kconfig"
 
source "drivers/parport/Kconfig"
 
source "drivers/pnp/Kconfig"
 
source "drivers/block/Kconfig"
 
source "drivers/misc/Kconfig"
 
source "drivers/ide/Kconfig"
 
source "drivers/scsi/Kconfig"
 
source "drivers/ata/Kconfig"
 
source "drivers/md/Kconfig"
 
source "drivers/message/fusion/Kconfig"
 
source "drivers/ieee1394/Kconfig"
 
source "drivers/message/i2o/Kconfig"
 
source "drivers/net/Kconfig"
 
source "drivers/isdn/Kconfig"
 
source "drivers/input/Kconfig"
 
source "drivers/char/Kconfig"
 
source "drivers/i2c/Kconfig"
 
source "drivers/spi/Kconfig"
 
source "drivers/gpio/Kconfig"
 
source "drivers/w1/Kconfig"
 
source "drivers/power/Kconfig"
 
source "drivers/hwmon/Kconfig"
 
source "drivers/thermal/Kconfig"
 
source "drivers/watchdog/Kconfig"
 
source "drivers/ssb/Kconfig"
 
#source "drivers/l3/Kconfig"
 
source "drivers/mfd/Kconfig"
 
source "drivers/media/Kconfig"
 
source "drivers/video/Kconfig"
 
source "sound/Kconfig"
 
source "drivers/hid/Kconfig"
 
source "drivers/usb/Kconfig"
 
source "drivers/uwb/Kconfig"
 
source "drivers/mmc/Kconfig"
 
source "drivers/memstick/Kconfig"
 
source "drivers/accessibility/Kconfig"
 
source "drivers/leds/Kconfig"
 
source "drivers/switch/Kconfig"
 
source "drivers/rtc/Kconfig"
 
source "drivers/dma/Kconfig"
 
source "drivers/dca/Kconfig"
 
source "drivers/auxdisplay/Kconfig"
 
source "drivers/regulator/Kconfig"
 
source "drivers/uio/Kconfig"
 
source "fs/Kconfig"
 
source "arch/arm/Kconfig.debug"
 
source "security/Kconfig"
 
source "crypto/Kconfig"
 
source "lib/Kconfig"
 

Posted by jc 2011年7月19日 05:45


newsbeuter RSS Reader

 

 # apt-get install newsbeuter
 $ vi ~/.newsbeuter/urls
 
http://rss.gmane.org/messages/excerpts/gmane.linux.drivers.i2c
 
 $ newsbeuter
   r # download current selected feed
   R # download all feeds
   # select one feed and press "Enter"
   q # quit
 

Posted by jc 2011年4月13日 03:59


Debian源密匙导入

 

 #**********加入163源后遇到的问题*********#
 
W: GPG error: http://security.debian.org stable/updates Release: 由于没有公钥,下列签名无法进行验证: NO_PUBKEY AED4B06F47    3041FA
 
# gpg --keyserver subkeys.pgp.net --recv-keys 473041FA
 
# gpg --armor --export 473041FA | apt-key add -
 

Posted by jc 2011年4月10日 04:05