顯示具有 embed 標籤的文章。 顯示所有文章
顯示具有 embed 標籤的文章。 顯示所有文章

2013年10月17日 星期四

F9 Microkernel 導讀活動 Part 1




今天JULUOS.ORG小聚 -- F9 Microkernel (a.k.a F9) 導讀活動,筆者將最近在拜讀 jserv 發起 F9 專案程式的筆記資料做個整理分享給大家。

為什麼我會想來讀F9 的程式碼呢?
首先,本人偏愛 BSD  License。

接著,之前有稍微看一下F9的程式,覺得寫得滿優雅的,程式看來順眼。記得曾看過關於優雅程式寫作的文章(我忘記那篇出處了>.<)中寫到:一個 .C 檔,最好保持在 300 行以內;一個C函式落在25~30行,目前看到的F9 code 有符合。見賢思齊,之前我的程式碼並沒有完全依循,之後也要再接再勵。

因為場地的關係,活動時間只有一個多小時;講了一些提要的重點,加上 F9 程式進入點的小部分,就沒時間了。之後找時間換個場地,再來辦導讀活動 Part 2。

最後,奉上今日的簡報檔,如有誤謬,請不吝指正。




2012年7月25日 星期三

F4OS與STM32F407的那些事兒?


源起,最近看到STM32F407這塊板子CPU 168MHz,性價比很高,手滑買了下來。


這塊板子上有個高手(Michael Pratt)正在認真地開發上面的作業系統,專案名為F4OS,源碼開放在GitHub。歷經三個多月,目前成品可直接在USART1跑一個只有一個uname 指令的shell。

在嵌入式無螢幕的裝置上,開發OS,最難的地方便是在沒有任何輸出之前的階段,把Terminal Console弄出來。

首先,Michael 開發是最先利用板子上的LED的明暗速度來進行偵錯。

筆者大約在6月份時,第一次用F4OS便是將LED 的明暗做調整,
接著用ARM的GDB來觀察暫存器值的變化,這真是黑暗前期。

直到最近,當看到Terminal輸出的畫面的一刻,真是令人十分感動。

USB2TTL

筆者使用的是  FT232 USB-Serial 的裝置
使用lsb 命令結果

~$ lsusb
Bus 002 Device 022: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
Bus 002 Device 021: ID 0483:3748 SGS Thomson Microelectronics
Bus 002 Device 002: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

STM32F407 + F4OS輸出畫面


執行uname -a 的輸出結果:

$ uname -a
F40S rev 143 Wed Jul 25 22:36:20 CST 2012

USB2TTL 與 STM32407 的連接

使用杜邦端子線來連接USB2TTL及STM32,之前一直卡在這裡;故特別對接法做個記錄。

STM32 Pin   ----    USB2TTL
PB6 (TX)  <------------> RX
PB7 (RX)  <------------> TX
GND  <-----------------> GND
(註:GND 線不接也可正常運作)

小結

有了Terminal 輸出的功能之後,開始進行其他實驗就十分的方便。
以上記錄目前的學習進度。


2012年2月26日 星期日

用BeagleBone Rev.A3 打造簡易行動NAS系統

承上篇開發環境 BeagleBone A8 實測Linaro-nano, 筆者便想這塊Beaglebone 可以做什麼實際用途呢?

去年,曾寫過試用FreeNas 8.01一文,若能將常用的功能(rsync, ssh, cifs) 放到Beaglebone,則它便可成為一台行動網路NAS。

但FreeNas 還沒有ARM的版本,所以筆者用Linaro-nano 為基礎,作了簡單實做。

開發時,遇到網路卡會不定時自動斷掉,十分惱人。原本以為是Linaro 所用的kernel 不穩定;
後來找了很久,最後發現BeagleBone - Rev. A3上已知硬體問題

Etherent Drop/Reset switch(A3 and A4 Only]
On some A3 and A4 boards, the reset switch can develop a low impedance path to ground creating a voltage divider making the reset line go to 1.5V to 1.8V. To determine this you can measure the voltage on pin 10 of P9. This issue can cause intermittent resets of the SMSC PHY, causing the link to drop. To fix this, just remove the reset switch. No, it will not void the warranty on the board if you remove the reset switch. You can request an RMA for a new switch and one will be sent to you. You can also request an RMA, return the board, and we will repair the switch for you.

remove_reset_button

依照說明(不會因此破壞保固),用尖嘴鉗把Reset 按鈕暴力拔除;斷電後,重新啟動執行,測試超過24小時,目前都運作正常。


簡易NAS移植

在Linaro 中,以apt-get 安裝下列套件
  • CIFS - Samba
  • Rsync -
  • FTP  - sftp
  • SSH - openssl-server
另外,使用者介面部分,暫時先以編輯設定檔方式來修改啟動必要之功能。

目前在開發板中,以Web方式來實作必要的管理介面。
Web 由將下列主要由 node.js+ python batchjob 組成。

利用node.js來實做web 介來顯示系統狀態:

使用arm gcc-4.6.1, 編譯node.js 0.6.9,並安裝npm套件: express, commander, nconf

NAS Web Prototype – Status

nas-web

小結:

經由上述實做,筆者將beaglebone Rev.A3 打造成為一個小型NAS 系統,
可利用 rsync , ssh/sftp , cifs 來經由網路存取其SD卡或姆指碟,
而系統記憶使用量約在80MB左右,應可進一步瘦身;
最後可依筆者需求來開發對應Restful API來進行管理作業。

2012年1月29日 星期日

開發環境 BeagleBone A8 實測Linaro-nano

最近實測了一塊Linaro活動贈送的開發板BeagleBone Rev.A3 (PDF英文手冊開發說明)。其中,內附一個4GB的micro SD 卡。

IMG_1622 IMG_1623

SD卡已預先載好Linaro-nano (Linux linaro-nano 3.1.0+ #1 Tue Nov 15 15:51:15 CET 2011 armv7l armv7l armv7l GNU/Linux)
驅動程式在Windows XP 上有些小問題。
請依下照步驟安裝,(其他系統安裝,詳參閱原英文說明)
  • 解壓縮BONE_DRV.exe
  • 先連接usb連接線
  • 硬體安裝精靈,並手動指定解壓目錄,進行安裝USB序列埠驅動程式及FTDI虛擬COM Port驅動程式。(詳見文後05-20更新)
IMG_1624

成功安裝後,可在裝置管理員中看到下列資訊(以筆者電腦環境,為COM6)。
image

接著開啟’超級終端機’,設定如下圖示:
beaglebone_com6_setup

重新接上USB線,即可看到,Linaro 開機畫面。
beaglebone_install_openssh_server_done

預設Linaro-nano環境,非常陽春,需要手動設定網路,來安裝需要的開發工具。
ifconfig eth0 192.168.253.10 netmask 255.255.255.0
route add -net 0.0.0.0 gw 192.168.253.1
echo "nameserver 192.168.253.1" > /etc/resolv.conf

以安裝openssh-server 為例
apt-get install openssh-server

beaglebone_install_openssh_server_start ssh_connected


小結

Linaro-nano 使用gcc 4.6.1,若要利用桌機進行開發,則需使用最新版本的Ubuntu11.10 做為來cross-compile開發環境,稍有不便。
就另一方面來說,目前CPU A8,256MB 記憶體, SD卡容量達4G,足夠用以直接在實驗板上開發部分小型程式。
筆者將所需要的程式一一安裝好後,體積小的它,直接可以作為移動的ARM小型開發平台,十分方便。

更新2012-05-20
回覆Henry讀者:筆者是在Windows XP 上,安裝BONE_DRV.exe
先使用USB連接BeagleBone到主機
假設解壓目錄為 C:\temp\BONE_DRV
會出現 尋找新增硬體 (選取不,連線到windows update)-> 選取從清單或特定位置安裝
1. 控制台->新增硬體精靈
 ->選擇BONE_DRV\FTDI 目錄進行安裝->出現尚未通相容性測試警告(如下圖示)
 
-> 選取繼續安裝->完成。
2. 接著又會跳出一次來安裝 XDS100v2 compatible USB Serial Converter B, 再安裝一次即可。

2011年10月14日 星期五

在Mac OS X初次使用Arduino實驗板

今天在HackingThursday 聚會,朋友借了一塊Arduino Mega 2560實驗板,現場測試。本文便是將開發設定相關心得做個紀錄。
當然可參考原文的說明手冊
首先至http://arduino.cc/en/Main/Software此下載Mac OS X安裝檔http://arduino.googlecode.com/files/arduino-0022.dmg
arduino_install1
開啟dmg檔案後,便會出現上列,將Arduino 圖示,拖曳到Applications(應用程式目錄),再安裝USB 序列埠驅動程式,如下,依指示安裝。
  arduino_Install_FTD_Driver
先使用USB連接線,連接Mac及2560實驗板,會出現偵測到新網路介面,按cancel 取消即可,不需進行此項設定。
IMG_1442Arduino Mega 2560 Modem in usb detected
再來到Applications 目錄中,找到並執行Arduino整合開發應用程式。
Arduino_in_Applications_dir
Arduino 整合開發環境是以Java開發而成,加上AVR gcc/g++ …的跨平台編譯器及相關設定所組成。
在Arduino設定,注意事項中,先由選單,選擇[Tools] –> [Board] –> [Arduino Mega 2560] (請依網友們的開發板型號,挑選)
arduino_select_hardware
緊接著設定USB 序列埠,先由選單,選擇[Tools] –>[Serial Port]->[/dev/tty.usbmodemfd121] (請依網友們的開發板型號,挑選)
 Arduino_select_the_serial_port
好戲上場,在Arduino中,已準備許多範例程式可供參考,選取視窗上方按鈕[Open]->[1.Basics]->[Blink],
 Arduino_selected_1.Basics_Blink.sample
即出現下方畫面,中央為範例程式碼。最後執行[Upload]鈕(右方數來第二按鈕),立刻編譯並上傳到開發板。(在傳送過程式中,TX燈會閃爍,完成後,即啟動閃爍程式,令13腳位LED每隔一秒閃爍一次。
arduino_Blink_LED_Uploading
若無其他3.3V LED可連13及GND腳位時,可參考下圖,USB Port右方,紅色燈號亦作用與在13pin插LED相同。
 IMG_1445 IMG_1448
結論
Arduino設計非常易於使用,並且有相當多的相容擴充元件可供使用,很適合不太熟悉程式設計及硬體的人來使用。

2011年10月1日 星期六

ARM Linux 開發環境設定指南

debian-arm-booting 
最近在工作上,需要用到ARM相關平台,所以花時間研究 ARM CPU 架構的開發環境,
其中硬體商(目前開發板:Friendly ARM Tiny6410)提供的部分程式必須在Windows 上才可執行。
故筆者想能不能在windows 及ubuntu-linux 中,也可各有一個模擬arm 的開發平台,可直接編譯程式而不需要使用cross-compiler(簡言之,如在windows平台上,使用ARM虛擬機器編譯arm執行檔)。
經過搜尋網上資料後,發現有一套件debian armel可供使用,且很貼心的提供可利用qemu arm來直接載入使用,大大減少重新編譯的時間。

設定步驟


安裝QEMU
下載debian-armel
檔案所在位置:http://people.debian.org/~aurel32/qemu/armel/
 a3853606c5762d41bb245aaeb8823996  debian_lenny_armel_desktop.qcow2
  dce9f0d2855d57b79b63bcf3a9ecd51d  debian_lenny_armel_standard.qcow2
  a6d0dde54fb27254e2b8d94736889462  initrd.img-2.6.26-2-versatile
  1969e2a0ffc571ccf6024dc7c842d4dd  vmlinuz-2.6.26-2-versatile
  c5f9039b463e07852055071ac118320a  debian_squeeze_armel_desktop.qcow2
  b7807306c4c79aaa9a423119f4633ffb  debian_squeeze_armel_standard.qcow2
  f73e83b8e48bd422457dafeb8afe7fc6  initrd.img-2.6.32-5-versatile
  8b33324f99d13dc71d6ad060db2fd60a  vmlinuz-2.6.32-5-versatile

筆者所使用的檔案組合如下表:
下載檔案說明
initrd.img-2.6.32-5-versatile初始化並啟動附加檔案
vmlinuz-2.6.32-5-versatile系統啟動用linux 核心
debian_squeeze_armel_standard.qcowdebian squeeze 標準系統映像檔(可寫入更新資料)


執行debian arm linux
開機完成後,預設登入帳號及密碼皆為root。
debian-arm-login

執行腳本檔
此腳本用來執行debian-armel,及相關必要參數。
run.sh
#!/bin/sh
export PATH="$PATH:/usr/local/qemu/bin"
PLATFORM="`uname -s | cut -d'_' -f1`"
QEMUEXE="qemu-system-arm"
if [ "$PLATFORM" = "CYGWIN" ] ; then
    QEMUEXE=${QEMUEXE}.exe
fi
img=debian_squeeze_armel_standard.qcow2
$QEMUEXE -M versatilepb  -kernel vmlinuz-versatile -initrd initrd.gz -m 256 -hda $img -append 'root=/dev/sda1' -redir tcp:2200::22

使用腳本檔案前用先將,下列檔案更名:

  • initrd.img-2.6.32-5-versatile  改為 initrd.gz
  • vmlinuz-2.6.32-5-versatile 改為 vmlinuz-versatile

進入到run.sh 所在目錄,並執行下列腳本檔

sh run.sh

註一:當在使用apt-get install gcc g++ 時,發生找不到檔案的情形。
解決方法: apt-get update –fix-missing
註二:因為qemu 網路架構原設計,需使用-redir 參數用來將Guest OS(debian-arm) 的ssh 22 port 轉到本機2200port。(記得debian-arm中,執行 apt-get install openssh-server來安裝ssh server)

結論
當筆者完成所有步驟後,等於擁有一台虛擬ARM機器,且為一包含完整開發軟體的LINUX系統。
若網友們所寫的程式無特別額外ARM硬體需求,則可直接在上面開發偵錯,可減少arm程式複製到arm 板子上的時間。

2011年9月5日 星期一

啟用e100 (i82559er)網路卡在自製Bos

bos_i82559er_enabled 續上篇自製BenOS支援lspci 命令,參考MIT OSE Lab6: Network Driver 及其中各項文件,且參照相關Linux網路驅動程式設計,目前已整合實作82559er網路卡驅動至BOS v0.21中。
新增及修改下列檔案:
pcireg.h PCI相關參數標頭檔,引用自NetBSD,源自MIT OSE LAB
pci.c 移植Lab6 kern/pci.c
net_e100.h 參考Lab6相關實作資料
net_e100.c 參考Lab6相關實作資料
teset/Makefile   已修改以i82559er為參數,啟動qemu :
qemu -fda "../bos.img" -net user -net nic,model=i82559er
執行後結果,如文頭畫面。

啟用e100
其中pci.c,如何啟用e100 82559er 簡略原始碼如下:
pci_func_enable(pci_pdata_t f) {
        pci_conf_write(f, PCI_COMMAND_STATUS_REG,
                       PCI_COMMAND_IO_ENABLE |
                       PCI_COMMAND_MEM_ENABLE |
                       PCI_COMMAND_MASTER_ENABLE);
        for (bar = PCI_MAPREG_START; bar < PCI_MAPREG_END;
             bar += bar_width)
        {
                uint32_t oldv = pci_conf_read(f, bar);
                bar_width = 4;
                pci_conf_write(f, bar, 0xffffffff);
                uint32_t rv = pci_conf_read(f, bar);
                if (rv == 0)   continue;
                int regnum = PCI_MAPREG_NUM(bar);
                if (PCI_MAPREG_TYPE(rv) == PCI_MAPREG_TYPE_MEM) {
                        if (PCI_MAPREG_MEM_TYPE(rv) == PCI_MAPREG_MEM_TYPE_64BIT)
                                bar_width = 8;
                        size = PCI_MAPREG_MEM_SIZE(rv);
                        base = PCI_MAPREG_MEM_ADDR(oldv);
                } else {
                        size = PCI_MAPREG_IO_SIZE(rv);
                        base = PCI_MAPREG_IO_ADDR(oldv);
                }
       pci_conf_write(f, bar, oldv);
       f->addr_base[regnum] = base;
       f->addr_size[regnum] = size; }

net_e100.c
啟用後,這時便用使用到 io region 1: 0xc040,長度為64位元組,參考Intel 82559,來進行下列操作。
需要將e100 做軟體重置(可參e100_reset函式),因使用DMA Rings,
所以接著要掛上傳送的緩衝區Control Block List(CBL)及接收用的緩衝區Receive Frame Area(RFA),可參考cbl_init()及rfa_init()。



net 命令
在起動Bos v0.21後,輸入net 指令,可看到下列結果:
bos$ net
PCI function 00:18.0 (8086:1209) enabled
mem region 0: 4096 bytes at 0xf2020000
io region 1: 64 bytes at 0xc040
cbl avail = 9, wait = 1, slot = 0x420000, irq=11
rfa avail = 10, wait = 0, slot = 0x420050
其中黃色標記三項資訊,在對網路卡設備進行操作時,會使用到。


結語
原使用e100設備序號,並不生效;後來研究OSE資料後,發現必須在qemu參數中設定,之後再使用設備序號1209來啟用e100(i82559er),如此才能正確執行在qemu環境。
MIT OSE Lab6十分具有挑戰性,筆者經幾天的努力才把這網路卡驅動部分實作完成;但大約只完成Lab6的三分之二,其餘部分,待9/6社群活動後,再來討論後面部分旳細節。本次程式碼可由此下載

2011年8月17日 星期三

自製作業系統 BenOS 原始碼公佈

bosv0dot2
最近把自製作業系統原始碼整理一下並修正部分問題,另附寫說明文件後,於今晚,發佈Ben OS v0.2,有興趣的朋友可從GitHub下載原始碼。
程式碼目前已在下列平台編繹並使用Qemu測試:
  • Ubuntu 10.04, 10.10, 11.04
  • Fedora 12
程式目錄說明
apps 應用程式,目前只有一個 bshell
blibc BOS用到的自製的C函式庫
boot 啟動程式
include 標頭檔案
kernel 系統核心相關
lib 核心相關函式庫
scripts 系統開發腳本檔
test 執行測試用
tools 預留工具程式
如何編繹請參閱?
Readme.md
Ubuntu + Qemu在VMWare Fusion Mac問題?
bosv0dot2-howtoquit
當Qemu執行時,跳離的快速鍵將會失效,造成無法正常使用Xwindow,可使用CTRL+ALT+2回到qemu monitor console,再輸入 "quit" + Enter 鍵離開Qemu 視窗。
BOS v0.2 編繹已不需要管理權限?
原來使用mount 磁片檔方式需要管理權限,現已修改為使用 mcopy (mtools)。(感謝社群成員Dennis 提供建議)
註:下次社群活動09/06/2011,詳請參閱社群首頁
更新0821

2011年5月31日 星期二

自製OS作業系統所需基本知識?

上篇,參考 wiki.osdev.org的OS開發之始一文,加入本人的心得寫了在OS開發中所需要的基礎。
(圖:引用自Wikipedia)


就實際上來說,寫OS向來被認為是一件十分困難且複雜的事。初學程式設計者,並不適合一開就自製OS。


以下是您必須瞭解的知識:

  • 電腦科學基礎: 你需深入且熟悉16進位和二進位符號之間邏輯運算,以及其他必要知識如:
    • 資料結構,相關的演算法的建立、 操作、搜尋和排序, 程式概念等等。

  • 語言與字彙: 你需能夠略懂讀和寫英文技術文章. 絕大部分從網站找到OS技術文章都以英文寫成。一般而言,中文譯書大約落後英文書二年左右。

  • 語言與字彙: 大部分OS的功能範例在osdev.org是均以程式語言C或C++寫成。假使你選用其他語言像是FreeBASICPascal;但 C 語言是程式設計通用語, 故而你應能以所使用之程式語言來轉換。

  • 組合語言Assembly: 應對組合語言有所瞭解。它是一種與硬體緊密相關的程式設計低階語言。組譯語言是機器語言便於記憶和理解的符號形式。 至少你必須閱讀關於這語言的教程, 並寫過用戶空間(user-space)的應用程式碼以便你能熟悉它。就算你使用更高階語言,你還必須瞭解它,例如bootloader, input/output 程式均少不了它的存在。當然你可將你所慣用的組言語言部分寫成函式,如此一來,便可使用C語言來呼叫(可參考Linux kernel )

  • 程式設計經驗: 你不僅需要知道相關程式語言,且需要瞭解並熟悉版本控制,如何偵錯等等。 簡言之,你必須在你開始寫OS之前,先成功地寫完一些user-space程式。

  • 開發環境:
    • 使用Linux來開發: 你將注意你需要許多 Unix工具。 Linux kernel 是一個常用學習的不錯參考範例,用以瞭解系統如何運作及其設計。 命令提示的工具(如bash 或 ksh等等) 是最低需求,並安裝Toolchain。

    • 使用Window來開發: Cygwin 提供一個簡易的方法來安裝unix開發環境, mingw 為一個精簡的GNU開發環境。


  • 工具集(Toolchain): 你必須瞭解如何使用編譯器(compiler: GCC)、組譯器(assembler: GNU as, NASM, MASM), 連結器(linker: GNU ld)及相關編譯工具(如make)。

  • 可執行的檔案格式: 核心空間(Kernel space)程式設計有許多額外的要求,以提供必要功能來給未知的應用程式開發所使用。故需要解析可執行的二進位檔案 (若你的OS需要載入並執行應用程式),請熟悉可執行檔格式 Executable File Types(其內部結構和如何連結產生)。

  • 自製OS 平台(Platform): 你必須學習相關CPU的說明手冊來寫你的OS所支援的平台. 手冊將包含必要的資訊來設計你的核心 。如x86 (Intel IA-32程式開發英文手冊)

以上心得,僅為拋磚引玉。

2011年5月25日 星期三

精簡版作業系統實戰: 自製OS用Qemu執行

源起一直以來想自己寫一個OS,練練功,去年到今年斷斷續續花了一至兩個月時間,寫了 我自己的陽春作業系統,最近正在整理程式碼做個記錄;證明有達成自己的目標。以下是從我的Xubuntu 10.10 執行benos 使用QEMU的畫面截圖。

qemu-system-x86_64 -boot a -M pc-0.11 -fda /home/ben/osdev/../main.img


畫面左上為Ben OS 執行結果。

目前實作了下列功能:

  1. 簡易的記憶體管理

  2. Timer中斷處理

  3. 鍵盤I/O, 佇列

  4. 多個執行緒的多工切換

  5. 簡單的命令模式 (ps, uname, free, clear, type mem)

  6. 精簡 libc 函式庫
在寫自己小OS過程中,最痛苦的莫過於不知道為什麼OS又沒畫面了。開發期間,學習了不少以前觀念有些模糊的部分,例如:如何進入保護模式、程式執行期權限模式、記憶管理、多工處理等等。
之後可能的研究議題如下:
  • 如何編繹及改寫BenOS支援網路開機方式(PXE)?

  • 如何支援檔案系統從S-ATA 硬碟?
如果想寫自己的OS,如何開始呢?
首先在完全沒有基礎情況,起步是最難的。
其實坊間有多本自製OS的書,以下是本人看過書:
- 偏重Linux 0.01 相關觀念介紹
- 較不適合初學者
- 偏重圖形介面實作,且用到許多自制工具或其他工具
- 較適合進階網友
- 比較全面詳細介紹觀念細節
- 較適合初學者
作業系統開發實戰手冊:以開發一個視窗多工作業系統為例(2011.5)
- 圖形介面實作
- 提供多平台的開發
- 使用大量表格來對照行號,進行解說。
再來最常遇到就是卡關,卡在某一環節良久,無法解決。這時如果有人可以討論,相信情況會大為改善。
wiki at osdev.org裡有英文文章,如英文尚可考慮精讀,有很多初學者的參考文章。
另外在Jserv's CURT v1 ARM 精簡作業系統一文中,Jserv 留言說有熱心網友將CURT v1移植到i386平台,可供大家參考練習。以上一點淺見,希望對您有所幫助。

更新2011-07-22:
建立共筆用的站台:Julu 作業系統開發協作平台,有興趣的人可留言(改到社群論壇,詳參閱協作平台),歡迎一同編修內容。

更新2011-08-17:

更新2011-12-14
BOS 使用新的bootloader(By Dennis) 以及初步整合VFS(By Wayling) 

2011年4月20日 星期三

讀"Orange's 一個作業系統的實現"的心得

前一陣子花時間看這本書,
這本算是滿適合新手入門的書,
很多觀念說明很清楚,不過要讀本書;還是需要一些基礎:
1.略懂組合語言
使用NASM,作為一些低階操作。
2.C 語言 (絕大部分程式使用。)
3.略懂環境Shell,Gnu Make
Windows 批次檔
Linux: Bash or Csh 等等

從環境設定,到Boot 流程、多執行序、記憶體、檔案系統的實作等等,
許多重要的OS元素均有詳細的介紹。

這本書環境設部分,很貼心的介紹了Linux 及windows 開發環境的設定。
對於不習慣使用Linux的讀者提供另一種選擇。

本人習慣使用Linux 環境,所以電腦環境如下:
OS: XUbuntu 10.10 , 桌面:Xfce
Tool: gcc 4.4.5, GNU Make 3.81, Bash 4.1.5, qemu 0.12.5
Editor: vim + ctags + cscope

一邊看書,一邊利用範例修改編繹,讓自己更容易瞭解,來龍去脈。
其實研究OS的原理,可讓自己更知道系統如何運作,加強自己的功力喔!!!
有空不妨看看!!!

2010年1月27日 星期三

Jserv's CURT v1 ARM 精簡作業系統

以下是我設定作業環境來編繹CURT v1的心得 (rework 2011-04-14)


 A.編繹程式

1. 下載工具
 a. 原 Toolchain for CURT v1


 b. gcc 4.4.1 for  by cyt93cs 



2. 安裝工具 (from sourceryg)
$ md5sum sourceryg++-4.4-93-arm-none-linux-gnueabi.bin
e9b81d6288c29f992f4af3d7c1cbddda sourceryg++-4.4-93-arm-none-linux-gnueabi.bin
$ ./sourceryg++-4.4-93-arm-none-linux-gnueabi.bin
The installer has detected that your system uses the dash shell
as /bin/sh. This shell is not supported by the installer.

You can work around this problem by changing /bin/sh to be a
symbolic link to a supported shell such as bash.

For example, on Ubuntu systems, execute this shell command:
% sudo dpkg-reconfigure -plow dash

Install as /bin/sh? No

3. 接著回到X-window 啟動Sourcery整合作業環境
輸入從codesourcery所申請的試用 license

B. 環境設定

1. 重設一下shell 的執行環境
sudo dpkg-reconfigure -plow dash

2. 安裝qemu-arm-static, qemu-kvm-extras
使用ubuntu 內建的 Synaptic 安裝檔案管理員來進行安裝

 
3. 設定toolchain 所在位置
PATH="/opt/CodeSourcery/sourcery_G++/bin:${PATH}"
export PATH
可由此下載原始碼 (http://blog.linux.org.tw/~jserv/archives/002082.html)
感謝 Jserv 的資訊 http://code.google.com/p/curt-v1-rework/ 主要進一些修改several patches were landed.

C. 編繹 CURT v1
1. 解壓縮程式碼 curt-src-v1.tar.bz2

2. 修正程式碼 device/serial.c第39行 有toolchain 相容問題如下:
if (!xxx && 0x00000040)
correct it to
if ((!xxx) && 0x00000040)

3.編繹
$ cd CuRT_v1/app/shell
$ make
~/CuRT_v1/app/shell$ ./prepare-flash
16384+0 records in
16384+0 records out
16777216 bytes (17 MB) copied, 0.0454887 s, 369 MB/s
16+1 records in
16+1 records out
16980 bytes (17 kB) copied, 4.0371e-05 s, 421 MB/s

D. 執行

~/CuRT_v1/app/shell$ ./run-on-connex
 
 
 
備註:記得要在X-Window 下開啟終端機,才能正確執行qemu-system-arm.

 
參考資料

http://sites.google.com/site/embedded2009/introduction-to-curt-v1
http://blog.linux.org.tw/~jserv/archives/002082.html
http://code.google.com/p/curt-v1-rework/

更新2011-09-18:
 - 其他同好網友文章:CuRT porting到x86成功

更新2012-04-01 相關文章連結
 - http://ccckmit.wikidot.com/os:curtos