iT邦幫忙

DAY 2
4

Linux Pi的奇幻旅程系列 第 2

Linux Pi的奇幻旅程(2)-檔案結構與開機程序

上一篇: Linux Pi的奇幻旅程(1)-ARMed Linux
http://ithelp.ithome.com.tw/question/10129066
下一篇: Linux Pi的奇幻旅程(3)-一台任你玩的小電腦
http://ithelp.ithome.com.tw/question/10129537
全部: http://ithelp.ithome.com.tw/ironman6/player/bizpro/alll/1
對於不熟Linux的人, 一開始就是像dd這樣一個深奧難懂的指令, Raspberry Pi和Linux看來並不容易, 要如何教小孩? 如何啟發小孩學習? 對比當年懵懵懂懂的我連電腦是什麼都不清楚, 就去學組合語言Assembler和機器語言8086/8088, dd這個指令其實是小菜, 把它當作一個字彙來學, 這也是小孩子學習語言的方法. 在接下來的文章中, 也會先出現一些指令, 再說明指令的用處.

將Raspberry Pi的映像檔錄進SD卡之後, 看看這張含有Raspbian的SD卡的內容吧:
$ tree -L 2 /media/user01/
/media/user01/
├── 9c7e2035-df9b-490b-977b-d60f2170889d
│ ├── bin
│ ├── boot
│ ├── dev
│ ├── etc
│ ├── home
│ ├── lib
│ ├── lost+found
│ ├── media
│ ├── mnt
│ ├── opt
│ ├── proc
│ ├── root
│ ├── run
│ ├── sbin
│ ├── selinux
│ ├── srv
│ ├── sys
│ ├── tmp
│ ├── usr
│ └── var
└── boot
├── bootcode.bin
├── cmdline.txt
├── config.txt
├── fixup_cd.dat
├── fixup.dat
├── fixup_x.dat
├── issue.txt
├── kernel_emergency.img
├── kernel.img
├── start_cd.elf
├── start.elf
├── start_x.elf
└── System Volume Information

23 directories, 12 files

我用了tree這個指令, 而不是常見的ls指令, ls是list的意思, 等同是Windows之下的dir指令,也就是列出目的目錄之下的檔案. 但是ls只能列出第一層子目錄, 這也是指令tree的目的, 上面的命令中, -L 2是指列出兩層子目錄(Level, L), 而目的目錄/media/user01/
是ubuntu自動將SD卡掛載所使用的目錄. 掛載是什麼意思? Linux的觀念是, 每一個物件都是檔案(file), 電子檔是檔案, 目錄也是檔案, 印表機是檔案, SD卡也是檔案, 外接硬碟是檔案, 藍芽設備也是檔案, 透過掛載(mount)可以把硬體掛載到系統中成為可以存取與管理的檔案. 這樣的觀念和Windows不一樣, Linux完全是檔案的做法. 數年前的Linux, 常常需要手動掛載外接的設備, 現代的Linux則已經自動幫使用者掛載外接設備了. 當Ubuntu把含有Raspbian作業系統的SD卡掛載進來系統中之後, 出現了兩個子目錄, 9c7e2035-df9b-490b-977b-d60f2170889d
和boot, 第一個以目錄9c7e2035-df9b-490b-977b-d60f2170889d含有給Linux Kernel所用的GNU工具和各種應用程式, 而子目錄boot中是讓SD卡可以開機的開機檔和Linux核心, 如果說Windows的C:\Windows是子目錄boot, c:\Program files 可以比喻為子目錄9c7e2035-df9b-490b-977b-d60f2170889d
, 當然, 這樣的對比很粗略, 只是盡量表達Linux的觀念.

要深入說明子目錄boot中的檔案, 就要先了解Raspbian怎麼在Raspberry Pi中開機的, 這和一般電腦開機的程序有些不同, 一般的電腦含有BIOS來負責開機的工作, 但是Raspberry Pi沒有BIOS, 開機的工作交給了GPU, 也就是繪圖晶片來做, 以下是開機的程序:

  1. 開啟電源後, ARM CPU和SDRAM並未啟動, 先啟動的是GPU.
  2. GPU首先啟動存在於主機板上的ROM中的第一階段開機程序來檢查SD卡中的檔案系統.
  3. GPU載入SD卡中boot目錄中的第二階段開機程序bootcode.bin
    到L2 Cache中, 並執行bootcode.bin.
  4. bootcode.bin啟動了SDRAM, 並載入第三階段開機程序loader.bin到RAM中, 並執行loader.bin.
  5. loader.bin載入GPU的韌體start.elf
  6. start.elf讀取設定檔config.txt及 cmdline.txt, 並載入最重要的Linux核心kernel.img.
  7. start.elf在載入kernel.img後啟動了CPU.
  8. 接下來就是Kernel的工作了, 也就是Raspbian開始在Raspberry Pi上運行了.

這是Raspberry Pi的開機程序.看起來很複雜, 只不過是一些存在於子目錄中的檔案陸續被載入與執行. 重要的是, Linux就是這樣運作的, 而Raspberry Pi很巧妙的用GPU來執行BIOS的工作.


上一篇
Linux Pi的奇幻旅程(1)-ARMed Linux
下一篇
Linux Pi的奇幻旅程(3)一台任你玩的小電腦
系列文
Linux Pi的奇幻旅程27

1 則留言

0
yiying
iT邦新手 1 級 ‧ 2013-09-24 23:24:22

謝謝,等我拿到Raspberry Pi我也要來玩了!

凍仁翔 iT邦新手 4 級 ‧ 2013-09-25 01:37:03 檢舉

RPi 現階段還不能跑 Windows 8 喔 哈哈

我要留言

立即登入留言