2014年9月5日 星期五

Linux LED class

naming
  • "devicename:colour:function"
user space
在 /sys/class/leds/<name>/
  • max_brightness
  • brightness: 0-max_brightness
  • trigger: 選擇性設定,設定特殊的顯示,可分成兩類
    • simple: 沒有設定
    • complex:有參數設定,例如 timer 有 delay_on、delay_off 參數
trigger 有 nand-disk mmc0 mmc1 timer oneshot heartbeat backlight gpio cpu0 default-on transient 等

hardware accelerated blink
  • LED 驅動程式有 blink_set 函數
  • led_blink_set()
  • led_brightness_set()
參考來源:
  1. Linux kernel source: Documentation/leds/leds-class.txt
延伸閱讀
  • 鍵盤 LED 由 input 子系統控制,跟 LED class 無關。
相關文章

FAT

FAT (File Allocation Table) 檔案系統一般是 FAT12、FAT16、FAT32 的通稱,原始設計是在 1977 給軟碟使用,也用在硬碟。隨著容量擴充,擴展出 FAT12、FAT16、FAT32,目前仍用於常用於隨身碟、記憶卡、數位相機、EFI 系統分割。

FAT 最大的缺點是 fragment造成讀寫速度變慢。

VFAT:FAT 支援長檔名的擴充,跟 FAT 相容,但會減少根目錄檔案數目。

在 Linux 檔案系統,msdos、vfat、及 umsdos 都支援 FAT12/16/32,msdos 只支援 8.3 的檔名,vfat 支援長檔名,umsdos 更加支援 Unix 檔案權限。

FAT12/16/32 檔名的編碼不是用 unicode,需要 native language 的 codepage 轉換,如 iso8859-1、cp437。

Linux 需載入 fat.ko、vfat.ko、nls_cp437.ko、及 nls_iso8859-1.ko,然後 (例如 SD 卡) 執行 mount /dev/mmcblk0p1 mnt/ 掛載。

exFAT:其實跟 FAT 的關係不大,沒有 NTFS 的 overhead,單檔可超過 4 GiB。
  • http://jamyy.dyndns.org/blog/2014/02/6011.html

最大容量最大檔案檔案數量叢集 (cluster) -- Allocation unit size
叢集大小叢集數
最小最大最少最大
FAT12
32MB4077



FAT16
2GB65517
64KB
65525
FAT3232GB、2TB4GiB - 1268435437512B64KB65,527 (*512B = 32MB = 最小容量)4177918
extFAT16EB16EB
512B32MB

NTFS


512B64KB


FAT32
opkg install dosfstools #工具程式,包含 mkfs.vfat 和 fsck.fat
opkg install kmod-fs-vfat #檔案系統不支援時安裝驅動程式
opkg update; opkg list “kmod-nls*” #列出可安裝的 NLS 檔,用來處理檔名編碼

exFAT
opkg install kmod-fs-exfat #工具程式
opkg install libblkid #檔案系統不支援時安裝驅動程式

參考來源:
  1. wikipedia: File Allocation Table
  2. wikipedia: FAT filesystem and Linux
  3. microsoft: Choosing Between File Systems
  4. microsoft: Character Sets Used in File Names
  5. iT邦幫忙─如何在XP使用超過4GB的隨身碟?
延伸閱讀

BeagleBone Black

主要元件
  • AM3358 或 AM3359 @1GHz SoC (內建 RTC),512MB DDR3
  • 4GB 8-bit eMMC (接 MMC1)
    • Micron MTFC4GLDEA 0M WTMTFC4GACAJCN-1M WT 或 Kingston KE4CN2H5A-A58
    • eMMC (embedded MultiMediaCard) 是 NAND Flash 和 controller 包裝在一起的晶片,可焊在板子上 (cf. 直接用 NAND Flash, SSD, SD)
  • TPS65217C 電源管理及轉換 (接 I2C0,CONFIG_MFD_TPS65217 及 CONFIG_REGULATOR_TPS65217)、TL5209 3.3V 電源轉換
  • I2C 4KB eeprom 24LC32A (接 I2C0,很小的 5-pin 元件,板子接點 TP4 接地才能寫入)
外部界面
  • LED
    • PWR/D1:恆亮
    • USR0/D2 (heartbeat)
    • USR1/D3 (µSD access)
    • USR2/D4 (CPU activity)
    • USR3/D5 (eMMC access)
    控制 LED 方式
  • 按鍵
    • RESET (S1):(用原本的開機模式) 重新開機
    • BOOT (S2):選擇 µSD 卡開機
      • 沒按時:eMMC→µSD→UART0→USB0 (SYSBOOT[4:0] = 11100b)
      • 開機按著時:SPI0→µSD→USB0→UART0 (SYSBOOT[4:0] = 11000b)
    • POWER (S3):啟動。按超過 8 秒重新啟動。
  • 5V 電源接頭 (BeagleBone Green 無)
  • miniUSB client 提供電源及通訊 (USB0,BeagleBone Green 改為 µUSB)。原廠軟體可顯示為隨身碟,並提供 Ethernet 及 UART 界面。
  • USB host (USB1,有輸出電源控制,過電流/溫度偵測)
  • µSD (MMC0)
  • RJ45 Fast Ethernet:PHY SMSC LAN8710A (MII1 & MDIO,中斷未接,CONFIG_SMSC_PHY)
    • AM335x 內建有 3 埠 Ethernet Switch,連接兩個 GMII 埠及處理器,驅動程式使用 cpsw (CONFIG_CPSW,device tree 是 ti,cpsw)
    • MAC address: AM335x efuse 是 TI 原廠寫入的,使用者只能讀取,不能更改。efuse 包括 Device ID、Version、唯一的 MAC Address 等。
    • MII0 有些 pin 沒拉出,所以無法外接其它 PHY
  • µHDMI (BeagleBone Green 無,改為 Grove 界面 I2C 及 UART)
    • HDMI Framer TDA19988 (LCD_DATA, McASP0, I2C0, 可關掉的 24.576 MHz 振盪器)
  • 2x 46 pin headers (P8, P9)
  • UART0 console 接頭 (J1: 1=GND, 4=RX, 5=TX)
  • JTAG 接腳 (P2)
  • 電池接點 (TP5, TP6, TP7, TP8)
開機
  • miniUSB 接到電腦,POWER 燈亮開機,可顯示為隨身碟,並提供 Ethernet 及 UART 界面
  • 開機順序
    • eMMC→µSD→UART0→USB0 (SYSBOOT[4:0] = 11100b)
    • 開機按著 BOOT 時:SPI0→µSD→USB0→UART0 (SYSBOOT[4:0] = 11000b)
  • 按 RESET 重新開機,但不會改變開機方式
  • AM335x booting
韌體
  • 最新韌體
  • 製作 SD Card
  • 更新 eMMC:下載 BBB-eMMC-flasher-xxx.img.xz,解壓縮,dd 到 SD card。然後用 SD 開機,等約 45 分鐘,直到全部 LED 都一直亮著 [參考]

作業系統及開發環境 [參考]
pin mux
Beagle board
  • BeagleBoard:OMAP3530 Cortex-A8 720MHz
  • BeagleBoard-xM:AM37x Cortex-A8 1GHz
  • BeagleBone:AM335x Cortex-A8 720MHz $89
ItemNetworkeMMCUSBOther$
BeagleBone BlackFE4GB1µHDMI [照片]49
BlueSteel-BasicFE01no55
BeagleBone GreenFEyes1Grove39
BeagleBone EnhancedGE?41GB DDR3, Barometer, Accelerometer, Gyro, Temperature69
PocketBeagleFE0OTG??
BeagleBone WirelessWi-Fi + BTyes1HDMI?
BeagleBone Green Wireless Wi-Fi + BTyes4Grove44
BeagleBone BlueWi-Fi + BT 4.1 BLE4GB1Battery, Motor, Sensor?

相關網站

  1. Beaglebone Black System Reference Manual
跟 BBB 不同處
  • 沒有 HDMI framer 及界面,仍可透過 HDMI cape 提供 HDMI 界面
  • 新增 Grove 界面 (I2C 及 UART)
  • 沒有 5V DC Jack socket

2014年9月4日 星期四

Ether Type

Ether Type
  • 0x0000 ~ 0x05DC (1500):IEEE 802.3 length
  • 0x0800 IPv4
  • 0x0806 ARP
  • 0x8035 RARP
  • 0x0842 Wake-on-LAN
  • 0x8100 VLAN
  • 0x86DD IPv6
  • 0x8809 EFM, Ethernet in the First Mile
  • 0x880B PPP, Point-to-Point Protocol
  • 0x8863 PPPoE, PPP Over Ethernet (Discovery Stage)
  • 0x8864 PPPoE, PPP Over Ethernet (PPP Session Stage)
  • 0x88A2 AoE, ATA over Ethernet:不用網路層的 storage area network (SAN),直接透過 Ethernet 存取 ATA 儲存設備
  • 0x88A8 Provider Bridging (IEEE 802.1ad)
  • 0x88B5 ~ 0x88B6 Local Experimental – 區域試驗用, 出處:IEEE Std 802a™-2003 (Amendment to IEEE Std 802®-2001)
  • 0x88B7 OUI Extended: 自訂 Layer 2 協定, 出處:IEEE Std 802a™-2003 (Amendment to IEEE Std 802®-2001)
  • 0x88BB LWAPP, Light Weight Access Point Protocol.
  • 0x88CC LLDP, Link Layer Discovery Protocol.
  • 0x88D8 Circuit Emulation Services over Ethernet (MEF-8)
  • 0x88E3 Media Redundancy Protocol (IEC62439-2)
  • 0x88E5 MAC security (IEEE 802.1AE)
  • 0x88F7 Precision Time Protocol (PTP) over Ethernet (IEEE 1588)
  • 0x8902 IEEE 802.1ag Connectivity Fault Management (CFM) Protocol / ITU-T Recommendation Y.1731 (OAM)
  • 0x892F High-availability Seamless Redundancy (HSR)
  • 0x9000 Loopback (Configuration Test Protocol)
  • 0x9002 Bridge Communications TCP/IP Systems Management
  • 0x9100 Q-in-Q
  • 0xFFFF reserved. 
參考來源
  1. http://en.wikipedia.org/wiki/Ethertype
延伸閱讀

2014年8月16日 星期六

OpenWrt 用到 libpcap 的程式

pcapsipdump: one file per sip session
cshark: CloudShark capture tool
collectd-mod-dns: DNS traffic input plugin
fwknopd:
arpd
wknock
airpwn
daemonlogger
lft
whob
arpwatch
aircrack-ng
dsniff
wiviz
karma
bandwidthd
ulogd-mod-pcap
faifa
rarpd
scdp
scanlogd
snort
snort-mysql
snort-pgsql
snort-wireless
snort-wireless-mysql
snort-wireless-pgsql
pyrit
nmap, nmap-ssl
ncat, ncat-ssl
nping
ucarp
ettercap:用來 injecting traffic
6tunnel
netdiscover:
cdp-tools
tcptraceroute
kismet-drone, kismet-server
scanlogd
raddump
darkstat
ngrep
netdiscover
knock, knockd
softflowd
tstat
wing
ipcad
pmacct-client, nfacctd, pmacctd, sfacctd, uacctdpmacctd-pgsql, nfacctd-mysql, pmacctd-mysql, sfacctd-mysql, uacctd-mysql, nfacctd-pgsql, sfacctd-pgsql, uacctd-pgsql, nfacctd-sqlite, pmacctd-sqlite, sfacctd-sqlite, uacctd-sqlite
nprobe
hping3
reaver
ptunnel
aircrack-ptw
fprobe
ssldump
imsnif
thc-ipv6-*
tcpdump
iftop

參考:libpcap

RS-232 Power

從 RS-232 取得電源

RS-232 訊號的電壓相對於 GND 是 -3V~-15V (mark, logic 1) 及 +3V~+15V (space, logic 0),負載 3~7 kΩ。有些接收端用 1.7V 跟 1.2V 區別 high 跟 low,跟 TTL 相容,但要加反向器。RS-232 驅動輸出電阻至少 300Ω,電壓至少 ±5V,最多 ±25V,但較少超過 ±12V 的。

DB-9 訊號
  1. DCD (Data Carrier Detect):輸入
  2. RxD:輸入
  3. TxD:輸出
  4. DTR (Data Terminal Ready) 輸出
  5. GND
  6. Data Set Ready
  7. RTS (Request To Send) 輸出
  8. CTS (Clear To Send)
  9. RI (Ring Indicator)
輸出的接腳都能拿來提供電源,有 DTR、RTS 跟 TxD,能提供多少電流跟使用的 RS-232 驅動能力有關。

參考電路

應用:

2014年8月15日 星期五

Linux POSIX semaphore

Linux semaphore sem_t 有一個 ≥0 的整數,sem_post() 將它加 1,sem_wait() 等候到 >0 時將讓它減一。另外還有 sem_trywait() 不等候,sem_timedwait() 等候到特定時間。

Linux semaphore 有兩種:memory-based 和 named。
  • Memory-based,或稱非 named:在某個記憶體位置,透過 sem_init() 初始化、sem_destroy() 銷毀。依照記憶體位置的不同,又可分成 thread-shared semaphore 跟 process-shared semaphore。前者只要是單一 process 內的某個位址,旗下的 thread 都可以存取。後者需要放在不同 process 都可以存取的 shared memory (可透過 shmget()、shm_open()、或 mmap() 取得),或者 fork 的子程序繼承了記憶體對應,也可以存取。
    • sem_init(sem_t *, int pshared, unsigned int value)
    • sem_destroy()
  • Named:有個名稱在 /dev/shm/sem.名稱,透過 sem_open() 建立或開啟、sem_close() 關閉、sem_unlink() 移除。
    • sem_open()/sem_close()/sem_unlink()
sem_post()
sem_wait(sem_t *):回傳 0 表示等候到 semaphore 並減一。
sem_trywait(sem_t *):類似 sem_wait(),但 semaphore 為 0 時不等候,回傳 -1 及 errno = EAGAIN。

sem_timedwait(sem_t *, const struct timespec *):類似 sem_wait(),但最久只等候到某個 Epoch 時間,等候不到的話回傳 -1 及 errno = ETIMEDOUT。
  • 可用來在特定時間執行某項工作。
  • 等候是呼叫 nanosleep() 處理

sem_getvalue():取得目前 semaphore 值。

等候 semaphore 成功回傳 0;失敗 semaphore 不變,回傳 -1 並設 errno。

errnosem_wait()sem_trywait()sem_timedwait()
EINTRsignal 中斷
EINVALsemaphore 無效semaphore 或時間 tv_nsecs 無效
EAGAIN-semaphore 為 0-
ETIMEDOUT--逾時

註:uClibc 不支援 pshared 和 named semaphore,SEM_VALUE_MAX 是 2147483647。內部使用 __pthread_lock()、一個 semaphore 計數值、以及一個 waiting queue。

應用:binary semaphore (比較:mutex), counting semaphore

參考

  1. man sem_overview, man sem_init, man sem_wait

SIP header Via

所有 SIP 訊息 都要有 Via,縮寫 v。一開始的 UAC 和後續途經的每個 proxy 都會疊加一個 Via 放傳送的位址,依序作為回應的路徑。 格式 sent-protocol sent-by [ ;branch= branch ][ ; 參數 ...] s...