發表文章

自己動手做OS之Raspberry Pi interrupt example 筆記

圖片
Happy Chinese New Year!!  希望我年假,有更多時間好好學習作業系統...T_T 這是個學習筆記,還未整理好,看起來很亂,但是我會盡量把該注意的重點寫下。 Interrupt example Raspberry Pi source code: https://github.com/tzuCarlos/RaspberryPi/tree/master/labInterrupt 這範例中,我們使用timer 產生IRQ,執行時,可以看到,每隔一小段時間,就會印出IRQ_handler,在IRQ_handler()中,先關掉了IRQ再印出IRQ_handler,接著啟動IRQ,這是一個簡單的範例,但不是有效率的處理IRQ方式,以後我們來討論巢式中斷。 當IRQ發生時,硬體會自動跳到0x18的位址上去執行程式,但我們系統是掛在0x10000上,跳到0x18時並沒有東西,這時有幾個解決方式,1是利用mmu把0x18 mapping 至 0x10018上,或是設定CP15,跳轉到正確的中斷處理向量表上。 ARM的官方網站有很好說明,值得一看。 http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0203j/Cacbhjjj.html 以下是節錄  陳鐘誠老師的網站( http://sp1.wikidot.com/arm ) ------------------------------------------------------------------------------------------------------------------------- ARM 的可存取暫存器為 R0-R15,其中 R13為堆疊指標 SP (Stack Pointer),R14 為連結暫存器 LR (Link Register),R15 為程式計數器 PC (Program Counter)。 ARM的狀態暫存器有 CPSR (Current Processor Status Register) 與 SPSR (Saved Processor Status Register)。其中 SPSR 乃是在中斷時用來自動儲存CPS...

MAC OS X 10.10 minicom USB to serial 安裝

1. 下載 minicom 2.7 https://alioth.debian.org/projects/minicom/ 2.解開後 ./configure (我的安裝時說automake需要安裝Xcode,就安裝先囉) make sudo make install 3. 上usb-to-serial cable網站我的chip是PL2303 -> 系統偏好設定>安全性與隱私>允許安裝 查詢我的設備是tty.usbserial ls -1 /dev/tty .* /dev/tty.usbserial  4.執行minicom -s 設定> Serial port setup -> A - Serial Device: /dev/tty.usbserial -> F - Hardware Flow Control: NO 選: save setup as dfl  -> 發現錯誤 sudo mkdir /usr/local/etc -> sudo chmod 777 /usr/local/etc nailed it!!!

Linux VLAN 筆記

圖片
Linux VLAN 筆記  kernel 開啟802.1q功能後,便可以透過簡單指令,設定VLAN.  brctl delif br0 ath0 brctl delif br0 eth0 vconfig add ath0 555 vconfig add eth0 555 ifconfig ath0.555 up brctl addbr br555 brctl addif br555 ath0.555 brctl addif br555 eth0.555 ifconfig ath0.555 up ifconfig eth0.555 up ifconfig br555 10.0.0.11 up Wireless AP mode運作正常,抓無線封包有看到帶了VLAN ID 555. 不幸的是,我的Wireless STA,不能成功ping到我的AP,只好下去看程式,這邊有幾個部份要看.  1. Linux kernel 802.1q  2.Wireless driver.(我手邊的是Atheros proprietary LSDK driver,所以這部份內容都不會放上來)  3.hostapd跟wpa_supplicant.    Linux的net_dev是用一個list串起來,每個net_dev都有會呼叫ev_queue_xmit ->dev_hard_start_xmit ,去傳送封包至下一步。  vlan.c::vlan_proto_init()時會invoke,dev_add_pack(&vlan_packet_type);  static struct packet_type vlan_packet_type __read_mostly = {         .type = cpu_to_be16(ETH_P_8021Q),         .func = vlan_skb_r...