摘 要:随着我国科技实力的不断增强,一些国家开始对中国采取措施,对出口中国的芯片进行加税加价,这使得中国众多企业和公司面临着严峻的挑战。我们要想摆脱困境,我们就要拥有自己的芯片,制造属于我们的中国“芯”。龙芯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-),男,汉族,福建漳州人,副教授,硕士。主要研究方向:气象探测技术及应用、信号获取技术及应用。