摘 要:隨著我國科技實力的不斷增強,一些國家開始對中國采取措施,對出口中國的芯片進行加稅加價,這使得中國眾多企業和公司面臨著嚴峻的挑戰。我們要想擺脫困境,我們就要擁有自己的芯片,制造屬于我們的中國“芯”。龍芯2K1000是我國今年剛剛研發的一款嵌入式芯片,龍芯2K1000處理器是面向網絡安全領域及移動智能終端領域的雙核處理器芯片。龍芯2K1000處理器集成兩個GS264處理器核,芯片外圍接口包括兩路PCIE2.0、一路SATA2.0、4路USB2.0、兩路DVO、64位DDR2/3及其它多種接口,可以滿足中低端網絡安全應用領域需求,并為其擴展應用提供相應接口。對于一款嵌入式芯片來說,要想使用它,首先要掌握它的啟動方法,其主要分為三個步驟:1、bootloader的制作;2、文件系統的制作;3、內核系統的安裝。論文主要研究基于龍芯2K1000龍芯派的內核啟動。
關鍵詞:Loongson;嵌入式;文件系統;內核啟動;bootloader
中圖分類號:TP368 文獻標志碼:A 文章編號:2096-4706(2018)12-0029-06
Kernel System Start Based on the Domestic Loongson 2K1000 Loongson Pie
XU Yibo1,CHEN Fuhao1,DING Zhenhua1,YANG Bifeng1,2
(1.Chengdu University of Information Technology,Chengdu 610225,China;
2.CMA.Key Laboratory of Atmospheric Sounding -KlAS,Chengdu 610225,China)
Abstract:With the continuous enhancement of science and technology in China,some countries have begun to take measures by increasing taxes and prices on chips exported to China,which makes many Chinese enterprises and companies face severe challenges. If we want to get out of this dilemma,we have to possess our own chips and make our own Chinese “core”. Loongson 2K1000 is an embedded chip just developed in China this year. Loongson 2K1000 processor is a dual-core processor chip for network security and mobile intelligent terminal. It integrates two GS264 processor cores,and the peripheral interfaces include two PCIE2.0,one SATA 2.0,four USB 2.0,two DV0s,64-bit DDR2/3 and many other interfaces,which can meet the needs of low-end network security applications and provide corresponding interfaces for its extended applications. For an embedded chip,the start-up way should be grasped before use it. The way of start-up is divided into three steps:first,the production of bootloader;second,the production of the file system;third,the installation of the kernel system. The article mainly introduces the core startup based on Loongson 2K1000 Loongson core pie.
Keywords:Loongson;embedded;file system;kernel startup;bootloader
0 引 言
中美貿易爭端警醒了中國人,讓我們大家真正看到了中國集成電路領域的短板。我國在集成電路領域一直處于非常低端的水平,長期依賴購買他國的電子芯片,是我們芯片研發制造落后的根本原因。中美貿易以來,國家對芯片研發的投入越來越多,我們的芯片制造也逐漸從低端開始走向中高端。龍芯2K1000就是今年剛剛發布的一款CPU,這款CPU是由中國科學院計算所自主研發的通用CPU。本文主要研究的是龍芯2K1000的文件系統制作及內核的啟動方法。
本文主要以bootloader內核引導、文件系統制作和內核系統安裝三大部分詳細介紹使用龍芯2K1000這款CPU的使用。
1 bootloader內核引導
bootloader內核引導即引導加載程序,是系統加電后運行的第一段軟件代碼,它的主要功能是引導啟動內核。在龍芯2K1000上我們使用的bootloader是pmon,也就是說pmon是CPU龍芯2K1000上電后執行的第一段軟件代碼,相當于X86PC機中的BIOS,其源代碼來源于BSD的內核代碼。pmon的二進制代碼存放于主板上的一塊512KB的flash芯片上,龍芯2K1000允許的最大Boot Rom容量是1MB。
對于512KB的flash,地址我們是確定的,虛擬地址0xbfc00000,物理地址0x1fc00000。CPU上電后,會在第一時刻從虛擬地址為0xbfc00000的讀取指令執行。
start.S核心是把pmon復制到內存。并初始化Cache,內存控制器,內存和南橋的部分信號。這個代碼執行之后會執行一行c代碼。解壓在二進制中壓縮的bin文件,跳到解壓后的代碼繼續執行。龍芯2K1000采用的是MIPS(Microprocessor without interlocked piped stages architecture)架構,之所以采用MIPS架構,是因為MIPS架構具有簡潔、優化、具有高度擴展性等屬性。MIPS架構的基本特點是:包含大量的寄存器、指令數和字符、可視的管道延時時隙。MIPS CPU約定CPU執行的第一條指令位于虛擬地址0xbfc00000,而pmon的二進制代碼是以 load -r -fbfc00000 gzrom.bin這個命令燒入bfc00000這個地址開始的flash,硬件布線會使得虛擬地址0xbfc00000映射到這塊flash上。而start.S就占據了gzrom.bin的開頭部分。gzrom.bin作為開頭部分是因為./zloader/Makefine.inc中的 L29:mips-elf-ld -T ld.script -e start -o gzrom ${START}zloader.o決定的。
2 文件系統制作
根文件系統是bootloader引導內核啟動時所mount的第一個文件系統,對于嵌入式軟件來說是至關重要的,內核代碼映像文件保存在根文件系統中,而系統引導啟動程序會在根文件系統掛載之后從中把一些基本初始化腳本和服務等加載到內存中去運行。在啟動yaffs,cramfs,jffs2文件系統的時候,首先需要確定我們的內核配置了該文件系統,并且配置不啟動ramfs文件系統,步驟如下:
make menuconfg ARCH=mips(執行該命令啟動圖形化配置界面,并用上下鍵選擇 General setup --->,如圖1圖形化配置界面1所示)。
在圖1的基礎上,按Enter鍵進入如圖2所示圖形化配置界面2。
確保圖1中淺色部分前面的[]中,沒有任何內容,按Esc鍵,并保存配置,重新編譯內核既可(make vmlinux ARCH=mips CROSS_COMPILE=mipsel-linux-);
把編譯好的vmlinux拷貝到tftp服務器的目錄中:
cp vmlinux /home/tftpboot/ (該命令在宿主機上執行)
2.1 yaffs文件系統的制作及啟動計
./mkfs.yaffs2 rootfs2 rootfs2.yaffs
備注:rootfs2為文件系統的名字rootfs2.yaffs為制作的yaffs文件格式的文件系統cp rootfs2.yaffs/home/tftpboot/(該命令在宿主機上執行)
修改權限:
chmod 777/home/tftpboot/rootfs2.yaffs
配置開發板的IP地址:ifconfig syn0 10.50.122.252向開發板上的nand燒寫文件系統的命令:
devcp tftp://10.10.122.24/rootfs2.yaffs/dev/mtd1y備注:燒寫到nand的分區1,若燒到分區0,改為mtd0y,做好燒寫到分區1
在你的主機上需要安裝tftp服務器,才可以通過網絡燒寫啟動內核(以下命令都在開發板上執行):
load tftp://10.50.122.23/vmlinux
g console=ttyS0,115200 rdinit=/sbin/init rootfstype=yaffs2 rw root=/dev/mtdblock1
2.2 cramfs文件系統的制作和啟動
mkfs.cramfs -b 16384 rootfs2 cramfs.imgs
備注:-b參數,大小與PAGE_SIZE(linux內核的配置)一樣,具體-b的實際意義請你通過man mkfs.cramfs查看
把制作好的根文件系統拷貝到tftp服務器的目錄中:
cp cramfs.imgs/home/tftpboot/
修改權限:
chmod777/home/tftpboot/cramfs.imgs
配置開發板的IP地址:
ifconfig syn0 10.50.122.253
燒寫命令:
devcp tftp://10.10.122.24/cramfs.imgs/dev/mtd1
啟動內核(以下命令在開發板上執行):
load tftp://10.50.122.23/vmlinux
g console=ttyS0,115200 rdinit=/sbin/init rootfstype=cramfs rw root=/dev/mtdblock1
2.3 jffs2文件系統的制作和啟動
mkfs.jffs2 -r rootfs2 -o rootfs2.jffs2 -e 0x20000 --pad=0x2000000 -n
-r:指定要生成 image 的目錄名
-o:指定輸出image的文件名
-e:每一塊要擦除的block size,不同的flash,block size會不一樣。這里為128KB
-pad:用16進制來表示所要輸出文件的大小,也就是 rootfs-jffs2.img 的大小,如果實際大小不足此設定的大小,則用0xFF補足
-n,-no-cleanmarkers:指明不添加清楚標記(nand-flash有自己的校檢塊,存放相關的信息)
把制作好的根文件系統拷貝到tftp服務器的目錄中:
cp rootfs2.jffs2/home/tftpboot/
修改權限:
chmod 777 /home/tftpboot/rootfs2.jffs2
配置開發板的IP地址:
ifconfig syn0 10.50.122.253
燒寫命令:
devcp tftp://10.10.122.24/rootfs2.jffs2/dev/mtd1
啟動內核(以下命令在開發板上執行):
load tftp://10.50.122.23/vmlinux
g console=ttyS0,115200 rdinit=/sbin/init rootfstype=jffs2 rw root=/dev/mtdblock1
3 龍芯派系統安裝
基于龍芯2K1000龍芯派的硬件沒有Flash,因此基于龍芯2K1000龍芯派的內核要從SD卡、U盤或者網絡加載,同時上面介紹的文件系統也存儲在這些介質中。本文實驗所采取的是用一張內存為16G的SD卡,因此,我們的文件系統和內核都存于這張SD卡中。
龍芯派目前提供三種系統的安裝,Loongnix、CentOS和SylixOS。其中Loongnix與CentOS類似,安裝時需要復制2部分內容:內核與文件系統,且這兩種系統使用的內核相同。SylixOS采用官方提供的一鍵安裝工具制作啟動盤直接完成。本文實驗所采用的是CentOS系統。
龍芯派采用啟動盤啟動。動盤可使用U盤或者SD卡。下面以U盤(插入USB讀卡器的SD卡等同于U盤)為例制作啟動盤。啟動盤上必須存放必要的內核及系統。
3.1 內核和文件系統的下載與制作方法
內核和文件系統都是從龍芯派的官網下載的,于Linux內核和Loongnix、CentOS系統的啟動盤必須自行制作,制作環境必須是Linux操作系統。可在虛擬機開啟Linux操作系統制作啟動盤,也可以使用安裝Linux操作系統的機器制作。這里采用虛擬機的方法。
3.2 CentOS系統安裝
3.2.1 啟動盤分區格式化
啟動虛擬機,插入我們的SD卡,這是Windows提示有USB設備插入,此時要在主機將此USB設備彈出,虛擬機才能連接USB設備。接著在虛擬機的可移動設備中連接此USB設備。
命令終端查看連接的USB設備,即看到已經連接的USB設備。
(1)首先我們對SD卡進行分區,操作如下:
root@ubuntu:~# fdisk/dev/sdb//操作分區/dev/sdb
Welcome to fdisk (util-linux 2.27.1).
Changes will remain in memory only,until you decide to write them.
Be careful before using the write command.
Command (m for help):d//刪除分區
Selected partition 1//選擇分區1,直接按Enter鍵
Partition 1 has been deleted.
Command (m for help):n//新建分區
Partition type
p primary (0 primary,0 extended,4 free)
e extended (container for logical partitions)
Select(default p)://缺省為主分區,直接按Enter鍵
Using default response p.
Partition number (1-4,default 1)://缺省為分區1,直接按Enter鍵
First sector(2048-60063743,default 2048)://停頓處直接按Enter鍵
Last sector,+sectors or +size{K,M,G,T,P} (2048-60063743,default 60063743):+512M//第一分區為512M
Created a new partition 1 of type 'Linux' and of size 512 MB.
Command(m for help):n//新建分區
Partition type
p primary (1 primary,0 extended,3 free)
e extended (container for logical partitions)
Select(default p)://缺省為主分區,直接按Enter鍵
Using default response p.
Partition number (2-4,default 2)://缺省為分區 2,直接按Enter鍵
First sector(1050624-60063743,default 1050624):
Last sector,+sectors or +size{K,M,G,T,P} (1050624-60063743,default 60063743)://缺省剩下容量,直接按Enter鍵
Created a new partition 2 of type 'Linux' and of size 28.1 GiB.
Command (m for help):w//保存退出
The partition table has been altered.
Calling ioctl() to re-read partition table.
Re-reading the partition table failed.:Device or resource busy
The kernel still uses the old table. The new table will be used at the next reboot or after you run partpr
obe(8) or kpartx(8).
root@ubuntu:~# fdisk -l
……
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 1050623 1048576 512M 83 Linux
/dev/sdb2 1050624 60063743 59013120 28.1G 83 Linux
使用的命令總結,其它的均按Enter鍵。
fdisk -l//查看當前分區
fdisk /dev/sdb//操作分區/dev/sdb
d //刪除分區
n //新建分區
+512M//第一分區為 512M
w //保存退出
(2)其次我們要對SD卡進行格式化操作。
root@ubuntu:~# umount/dev/sdb1
root@ubuntu:~# mkfs.ext3/dev/sdb1//格式化第一個分區
mke2fs 1.42.13 (17-May-2015)
/dev/sdb1 contains a vfat file system
Proceed anyway?(y,n) y
Creating filesystem with 7507712 4k blocks and 1880480 inodes
Filesystem UUID:0ad55ff6-70ec-496d-8399-57c6c27e5a67
Superblock backups stored on blocks:
32768,98304,163840,229376,294912,819200,884736,1605632,2654208,4096000
Allocating group tables:done
Writing inode tables:done
Creating journal(32768 blocks):done
Writing superblocks and filesystem accounting information://停頓處,直接按Enter鍵
Done
root@ubuntu:~# mkfs.ext3 /dev/sdb2//格式化第二個分區
mke2fs 1.42.13 (17-May-2015)
Creating filesystem with 7376640 4k blocks and 1844160 inodes
Filesystem UUID:b6f5661a-cfb7-4958-9483-e5a40e4762c1
Superblock backups stored on blocks:
32768,98304,163840,229376,294912,819200,884736,1605632,2654208,4096000
Allocating group tables:done
Writing inode tables:done
Creating journal (32768 blocks):done
Writing superblocks and filesystem accounting information://停頓處,直接按Enter鍵
Done
(3)最后使用的命令總結。
umount /dev/sdb1 //缷載U盤分區1
mkfs.ext3 /dev/sdb1 //格式化U盤分區1為ext3
mkfs.ext3 /dev/sdb2 //格式化 U 盤分區2為ext3
3.2.2 啟動盤的相關配置
現在,我們已經在官網下載好我們所用安裝的內核CentOS,也已經將SD卡分區并格式化,接下來,我們要將下載的Linux內核/loongsonpi/os/new_fedora21/vmlinux 復制到分區1根目錄下。解壓并復制后的CentOS分區1如圖3所示。
再將/loongsonpi/os/CentOS6.4-Multilibs-mips64-RC2-Build009-20150701.iso解壓并復制到分區2的根目錄下,解壓的時間會很長(30分鐘以上)。解壓后并復制后的分區2的文件系統如圖4所示。
在CentOS系統分區1和分區2還要修改一些配置,如圖5啟動盤配置的修改。
修改步驟:
(1)分區2 /boot目錄修改,添加boot.cfg文件;
(2)內核復制到分區2 /boot目錄下;
(3)分區2 /etc/X11/xorg.conf.d/xorg.conf.2h。
然后卸載啟動盤,將我們制作好的文件系統和啟動盤這張SD卡插入龍芯派板子,上電啟動。開機后加載內核,然后啟動系統。控制臺啟動如圖6CentOS啟動后控制臺輸出的停止界面所示。
4 結 論
本文基于國產芯片Loognson龍芯派這塊板子,大致介紹了Loognson龍芯派的一些主要參數和性能,詳細為大家介紹了基于Loognson龍芯派的bootloader內核引導、文件系統制作和啟動盤的制作。當前我國集成電路的發展正在一步步走向正軌,芯片Loognson是一款性能非常好的嵌入式應用芯片,應用范圍相當廣泛。本文將Loognson龍芯派的啟動和使用方法都記錄了下來,相信對大家有很高的使用價值。
參考文獻:
[1] 李菲.嵌入式氣象采集系統及網絡實時性研究 [D].天津:河北工業大學,2011.
[2] 楊霞.基于OMAP3530以太網視頻采集系統的設計與實現 [D].南京:南京郵電大學,2011.
[3] 史順玉.基于北斗衛星導航系統的智能車載終端設計 [D].青島:中國海洋大學,2014.
[4] 王洪虎,譚悅,申利民.基于嵌入式Cramfs的根文件系統配置新方法 [J].微計算機信息,2010,26(17):78-80.
[5] 孫九瑞,孫曉晨.基于ZigBee的圖書館環境監控系統設計 [J].應用科技,2015,42(3):49-54.
[6] 李鐵柱.基于LINUX的數字電視軟件通用升級系統 [D].青島:中國海洋大學,2014.
[7] 張久強,施仁政,陳遠知.基于ZigBee的WSN節點嵌入式軟件研究與開發 [C]//第八屆全國信號和智能信息處理與應用學術會議.第八屆全國信號和智能信息處理與應用學術會議會刊.中國青海:《計算機工程與應用》雜志社(THE PUBLISHING HOUSE OF COMPUTER ENGINEERING AND APPLICATIONS),2014:341-344.
[8] 焦鍵.嵌入式系統基礎及應用 [M].重慶:重慶大學出版社,2014.
[9]徐志永.基于嵌入式LINUX的網絡存儲與共享平臺研究 [D].哈爾濱:哈爾濱工程大學,2007.
[10] 張菊莉,張君毅,孟小鎖.基于龍芯2F架構的PMON分析與優化 [J].現代電子技術,2011,34(2):19-21.
[11] 史巧碩,范東月,柴欣,等.嵌入式Linux根文件系統的構建與分析 [J].計算機測量與控制,2015,23(2):656-659+663.
[12] 孫冬梅,石南.嵌入式LINUX系統設計及應用 [M].北京:清華大學出版社,2017:7-34.
作者簡介:徐意泊(1993-),男,漢族,河南洛陽人,碩士研究生。主要研究方向:嵌入式單片機、氣象設備儀器;陳富浩(1993-),男,漢族,四川德陽人,碩士研究生。主要研究方向:嵌入式單片機、氣象設備儀器;丁振華(1994-),男,漢族,江蘇泰州人,碩士研究生。主要研究方向:FPGA、DSP、數字信號處理;楊筆鋒(1980-),男,漢族,福建漳州人,副教授,碩士。主要研究方向:氣象探測技術及應用、信號獲取技術及應用。