龍芯軟體開發:使用龍芯2e的模擬器GXemul

來源:互聯網
上載者:User

by falcon <wuzhangjin@gmail.com>
2008-01-13

    如果想從事loongson的軟體開發,卻沒有開發板,那麼可以通過其虛擬機器gxemul(for loongson)來emulate。不過目前可以獲得的支援loongson的最新gxemul是0.4.3,並且僅僅支援loongson 2e,另外網路支援也不夠好。下面我們逐步介紹如何在x86平台下的ubuntu系統上通過gxemul來類比一個loongson的基本軟體開發環境。

1、介紹

    Loongson[1]作為國產的通用cpu,採用mips架構,是中國科學院計算所研發,由意法半導體公司製造的高效能、低功耗的處理器晶片。loongson一直在不斷的發展中,從最初的一代到現在的二代,以及正在研製的三代,目前市場上的產品主要基於2e和2f序列。
    而福龍迷你PC則是由中科龍夢公司採用loongson處理器製造的一款個人電腦,精緻、小巧。
福龍迷你PC採用嵌入式系統常用的PMON作為其BIOS和Boot Loader,採用Debian作為其作業系統。

    為了能夠類比一個loongson的基本開發環境,我們需要一個處理器以及基本外設的整套模擬器,qemu作為一款非常流行的開放原始碼模擬器,支援mips架構,但是由於loongson有很多擴充的指令qemu不支援,其他的諸多mips模擬器也有類似的問題,所以我們這裡介紹另外一款經過移植的,能夠基本類比loongson 2e的模擬器: GXemul[2]。
    有了模擬器,我們就需要通過它來載入BIOS和BootLoader,並通過BootLoader來引導linux作業系統。由於福龍迷你PC等基於loongson的產品都採用PMON[3]作為其BIOS&BootLoader,所以我們也需要瞭解如何編譯PMON,並在GXemul中載入它。
    載入好PMON之後,就可以利用它來引導一個Debian[4]作業系統。這裡將介紹如何引導一個現有的Debian作業系統和如何通過GXemul安裝一個全新的Debian作業系統。
    之後,我們介紹如何在安裝好的Debian作業系統中安裝基本的軟體開發工具,並介紹一個組合語言開發的執行個體。

2、使用GXemul

    目前支援loongson2e的最新可用的版本是GXemul 0.4.3,可以從http://www.lemote.com/upfiles/下載到。

$ wget -c http://www.lemote.com/upfiles/gxemul-0.4.3.godson.tar.gz
$ tar zxf gxemul-0.4.3.godson.tar.gz
$ cd gxemul-0.4.3
$ dpkg-buildpackage
$ dpkg -i gxemul_0.4.3-1_i386.deb

 

    安裝完以後,可以下載一個編譯好的PMON.bin以及一個包含Debian基本檔案系統的硬碟映像檔案。

$ wget -c http://www.lemote.com/upfiles/emulator.tar.gz
$ tar zxf emulator.tar.gz
//編譯好的pmon.bin,這個是Loongson的BIOS&BootLoader
$ ls emulator/pmon.bin
//這個是loongson的linux核心
$ ls emulator/vmlinux
$ wget -c http://www.lemote.com/upfiles/virtual-disk.tar.bz2
$ tar jxf virtual-disk.tar.bz2
//這個是基本的Debian系統
$ ls hda

 

    通過GXemul啟動PMON.bin,通過PMON引導Debian系統。

$ gxemul -Xe bonito 0xbfc00000:/path/to/pmon.bin -d /path/to/hda

 

   
    啟動以後會先進入PMON的命令列,我們需要手動載入核心,並執行。

// 從虛擬硬碟鏡像檔案中載入linux核心
PMON> load /dev/fs/ext2@wd0/boot/vmlinux
// 給核心傳遞一個啟動參數root,告知檔案系統所在分區,並通過g命令引導linux
PMON> g root=/dev/hda1

 

    過一段時間就可以看到熟悉的linux登入提示,鍵入root就行,沒有密碼。

    實際上,我們也可以直接通過GXemul引導那個Debian檔案系統,而不用PMON.bin的引導,操作如下:

$ gxemul-0.4.3/gxemul -Xe bonito -d /path/to/hda -o "root=/dev/hda1" /path/to/vmlinux

 

    現在說明一下參數的作用:X指定要使用X11,e指定機器類型,這裡的bonito是loongson2e的類型,-d指定載入某個檔案作為磁碟映像,-o是指定一些傳遞給後面的可執行檔的參數,直接跟上的vmlinux則是一個可以在Gxemul上啟動並執行二進位檔案,前面的參數是傳遞給它的。
    另外一個說明:在Intel(R) Core(TM)2 Duo CPU機器上使用gxemul 0.4.2 for loongson 2e無法正常工作,建議大家直接使用上面的0.4.3。

3、編譯PMON

    上面之所以要介紹通過PMON.bin來載入和引導Debian系統,是因為這樣的話我們可以研究一下PMON。如果僅僅想通過Gxemul來學習loongson2e的彙編,你直接通過GXemul來啟動那個Debian系統就行了。
    下面介紹如何編譯PMON。
   
    下載PMON的原始碼,如果沒有svn,記得先把subversion安裝上,如果沒有git,也記得安裝一下:

// 這個貌似已經停止更新,不過還是可以玩的
$ svn co http://www.loongson.cn/svn/pmon-loongson/
// 如果想使用最新的版本,建議用git倉庫(見資料[6]的官方說明),後面都以這個為例
$ git-clone http://www.loongson.cn/support/git/project/pmon

 

    下載並安裝mips交叉工具鏈(好老好老,呵呵,gcc才2.x,不過跟上面的代碼配套,如果用最新的toolchain[6],反而沒有辦法編譯上面的PMON)。

$ wget http://www.loongson.cn/svn/pmon-loongson/toolchain/toolchain-pmon.tgz
$ tar -C / -zxvf toolchain-pmon.tgz

 

    設定環境變數,把下面兩行添加到/etc/profile中,並通過執行"source /etc/profile"生效。

export MKDEP=makedepend
export PATH=/usr/local/comp/mips-elf/gcc-2.95.3/bin/:$PATH

 

    編譯一下PMONCFG,這個工具用來分析設定檔,以便進行不同的編譯動作,如果不安裝會無法編譯PMON。

$ cd tools/pmoncfg
// 我沒有辦法直接編譯,原因是新版本的gcc對類似loop:的標籤比較“挑剔”[5],你得在後面加個空語句之類,如果遇到錯誤,自己根據提示修改吧。
$ make
$ cp pmoncfg /usr/bin/

 

    編譯PMON(for loongson2e)。

$ cd zloader.2edev/
$ make cfg
$ make tgt=rom
$ make tgt=ram
// 產生後的pmon
$ ls pmon.bin.gz
$ gunzip pmon.bin.gz

 

   
    現在就可以用你自己編譯的PMON來引導Debian系統了。
    說明:如果編譯過程中遇到錯誤,請注意看錯誤提示,一般就是缺少什麼標頭檔之類的,把對應的軟體包安裝上就行了。

4、在GXemul上安裝一個全新的Debian作業系統

    待續……
    (還沒有找到適合loong2e的安裝程式,如果想瞭解基本的安裝過程,請參考資料[7,8])  

5、安裝基本的開發環境工具

    上面的硬碟鏡像檔案中的Debian基本系統啟動後,不支援網路(有時間得先把這個解決),否則就可以直接通過網路安裝我們需要的各種工具了(基本上把build-essential,cscope,ctags之類安裝上就行)。不過該系統上,gcc之類的工具都已經有了,基本可以用(如果確實覺得不夠,而且只想學習mips彙編,那麼可以利用qemu來湊合一下,具體操作見我之前寫的一篇blog[14])。
    下面介紹如何往該硬碟鏡像檔案系統中添加檔案。

    這個硬碟鏡像檔案包含一個基本的檔案系統,我們可以通過fdisk查看檔案系統在該檔案中的開始位置[10],然後把它掛載起來。

$ fdisk -l -u -C1 hda

Disk hda: 0 MB, 0 bytes
16 heads, 63 sectors/track, 1 cylinders, total 0 sectors
Units = sectors of 1 * 512 = 512 bytes
Disk identifier: 0x00000000

               Device Boot      Start         End      Blocks   Id  System
hda1              63     1968623      984280+  83  Linux
Partition 1 has different physical/logical endings:
     phys=(1023, 15, 63) logical=(1952, 15, 63)

 

    可以看到,該檔案中的hda1分區的起始位置是第63個扇區,而每個扇區是512bytes,這樣,檔案系統的位移就是63*512=32256。下面掛載該分區。

$ mount -o, offset=32256 hda /mnt
$ ls /mnt/
bin  boot  dev  etc  home  initrd  lib  lost+found  media  mnt  opt  proc  root  sbin  srv  sys  tmp  usr  var

 

   
    這樣我們就可以往該檔案系統中添加檔案了。

6、開發執行個體

    關於C語言開發,跟底層架構關係不大,但是組合語言開發卻有很大的不同。因為我在資料[13]中寫了一個Hello World的例子,這裡就不再介紹了,請大家直接參考資料[13],這個例子我在上面的Debian系統中也可以正確編譯和執行。

    本文參考了很多相關資料,大都列在後面,如果在閱讀本文時遇到相關問題,請直接找對應的參考資料查看或者在後面回帖。

參考資料

[1] Loongson from wikipedia
http://en.wikipedia.org/wiki/Loongson
[2] GXemul
http://gavare.se/gxemul/
[3] PMON 2000
http://www.opsycon.se/
[4] Debian
http://www.debian.org/
[5] compilartion error : label at end of compound statement
http://www.linux-mips.org/archives/linux-mips/2006-03/msg00234.html
[6] loongson相關的git軟體倉庫
http://www.loongson.cn/support/cgi-bin/gitweb/gitweb.cgi?
http://www.loongson.cn/support/public/
[7] official GXemul document
http://gavare.se/gxemul/gxemul-stable/doc/guestoses.html
[8] gxemul_loongson安裝NetBSD
http://www.lemote.com/bbs/viewthread.php?tid=12391&highlight=gxemul
[9] 比較穩定的龍芯gxemul-0.4.2
http://www.lemote.com/bbs/viewthread.php?tid=1957&extra=page%3D
[10] 磁碟完整映像的mount
http://www.anheng.com/news/html/net_admin_blog/dd_hda_mount_loop.html
[11] pmon編譯方法
http://www.lemote.com/bbs/viewthread.php?tid=7448&
[12] 編譯PMON指南
http://blog.csdn.net/caimouse/archive/2006/12/24/1458074.aspx
[13] MIPS組合語言程式設計之Hello, World!
http://oss.lzu.edu.cn/blog/blog.php?/do_showone/tid_1674.html
[14] 在unbuntu8.04下通過qemu構建mips-linux開發環境
http://oss.lzu.edu.cn/blog/blog.php?/do_showone/tid_1646.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.