本文转载自:https://github.com/pengphei/smartloong-sphinx/blob/master/source/cn/loongson1c_buildroot_guide.rstphp
引子:从龙芯1C预订拿到板子已经很长一段时间了,由于各类事情,一直让它呆在角落的冷宫里。昨天,愤而出去骑行,有导航出错,入的一片幽静山林,正能量爆棚,一下午休息,晚上兴致上来,看了看龙芯的说明,对rootfs部分的构建太过于麻烦,因而夜深人静,开始折腾,经由几个小时鼓捣,终于让buildroot能够支持龙芯1C-智龙开发板rootfs构建。高兴之余,以为能够将过程写下来,可让你们了解buildroot的构建机制,对编译工具链选择,系统包指定,以及最后的文件系统打包等都有一个细节的了解。html
智龙开发板是由 openloongson 开源社区推出的基于龙芯1C处理器的精简开发板,提供基础的硬件接口,包括一路以太网接口,一路USB Host接口,SD卡存储,2x40 pin io扩展,外置纽扣电源供电RTC。具体的信息能够参考开源龙芯社区网站和论坛。python
龙芯1C芯片是基于LS232处理器核的高性价比单芯片系统,具有丰富的外设接口及片上模块,为开发者提供足够的计算能力和多应用的链接能力。可应用于指纹生物识别、物联传感等领域。linux
龙芯1C包含浮点处理单元,能够有效加强系统浮点数据处理能力。1C的内存接口,支持多种类型的内存,容许灵活的系统设计。支持8-bit SLC NAND或MLC NAND FLASH,提供高容量的存储扩展接口。git
龙芯1C的具体用户手册和数据手册能够查看 http://www.loongson.cn/product_info.php?id=53 。github
龙芯处理器兼容MIPS32指令集,并且官方提供消息,在新的gcc中是对龙芯各种芯片提供主流的支持。那么也就是说咱们能够经过MIPS32的GCC编译工具链编译出可以支持龙芯1C的可执行文件。shell
目前在开源社区存在两个很是普遍使用的Linux from scratch 开发平台,即 openWRT 和 Buildroot,二者都对MIPS32提供支持。这里咱们选择Buildroot做为基础工具构建适用于龙芯1C的rootfs。bash
根据龙芯开源社区或者网上有限的参考资料,智龙开发板使用yaffs2做为根分区文件系统,而且整个Nand Flash分为三个分区。第一个分区为内核分区,第二个分区为根分区,第三个分区为数据区。对应的分区表以下:网络
# cat /proc/mtd dev: size erasesize name mtd0: 00e00000 00020000 "kernel" mtd1: 06400000 00020000 "os" mtd2: 00e00000 00020000 "data"
龙芯使用网络烧录 rootfs 指令以下:app
基于 cramfs 文件系统镜像烧录指令:
PMON>devcp tftp://192.168.x.xxx/rootfs-cramfs.img /dev/mtd1
基于 jffs2 文件系统镜像烧录指令:
PMON>devcp tftp://192.168.x.xxx/rootfs-jffs2.img /dev/mtd1
基于 yaffs2 文件系统镜像烧录指令:
PMON>mtd_erase /dev/mtd1
PMON>devcp tftp://192.168.x.xxx/rootfs-yaffs2.img /dev/mtd1 yaf nw
龙芯启动参数设置指令以下:
基于 cramfs 文件系统的启动参数设置:
PMON>set append 'root=/dev/mtdblock1 console=ttyS2,115200 rootfstype=cramfs video=ls1bfb:480x272-16@70'
基于 jffs2 文件系统的启动参数设置:
PMON>set append 'root=/dev/mtdblock1 console=ttyS2,115200 rootfstype=jffs2 video=ls1bfb:480x272-16@70'
基于 yaffs2 文件系统的启动参数设置:
set append 'root=/dev/mtdblock1 console=ttyS2,115200 rootfstype=yaffs2 video=ls1bfb:480x272-16@70'
PMON 中的系统重启指令:
PMON>reboot
龙芯的根文件系统打包方法:
基于 cramfs 文件系统打包:
mkcramfs /root/rootfs rootfs-cramfs.img
chmod 777 rootfs-cramfs.img
# 或者自带工具 mkfs.cramfs /root/rootfs rootfs-cramfs.img chmod 777 rootfs-cramfs.img
Note
使用 chmod 777 rootfs-cramfs.img 修改文件系统权限,是为了防止出现没法烧写的状况。
基于 jffs2 文件系统打包:
mkfs.jffs2 -r /root/rootfs -o rootfs-jffs2.img -e 0x20000 --pad=0x2000000 -n
chmod 777 rootfs-jffs2.img
基于 yaffs2 文件系统打包:
mkyaffs2image /root/rootfs rootfs-yaffs2.img
chmod 777 rootfs-yaffs2.img
Note
这里须要注意的是,打包 yaffs2 文件系统镜像所使用的命令为 mkyaffs2image 而不是 Buildroot 中默认打包 yaffs2 的 mkyaffs2 指令。二者由不一样的软件包生成,命令也不相同。
在拿到智龙开发板,并了解了上面的准备工做,就能够开始 MIPS 版本的 Buildroot 构建。目前使用的 Buildroot 来自于 buildroot 的 github 开发版本。构建更多详细信息能够参考它的 操做手册。
获取 Buildroot 源码
git clone https://github.com/pengphei/buildroot.git
安装准备软件
buildroot 的构建须要依赖如下软件或者库:
系统构建
为了构建出支持智龙开发板可用的镜像格式。在本来的 Buildroot 环境中添加了 yaffs2img 文件系统支持。该包与 Buildroot 中原有的 yaffs2 文件系统构建并不相同,须要特别注意。
智龙开发板的构建命令以下:
cd buildroot
cp configs/loongson1c_smartloong_defconfig .config
make
若是但愿根据本身的须要,添加本身须要的软件包,能够执行以下命令进行根文件系统软件包的定制:
make menuconfig
Note
上述命令与 linux 内核的配置工具和使用方法彻底相同。只是 buildroot 将会从网络上下载本身所须要的基础软件包以及构建工具链,在首次构建时,代码的下载和构建将会须要比较长的时间。
在 make 命令执行完成以后,会生成 output/images/rootfs.yaffs2img 文件,该文件即为能够烧录到智龙开发板中的根文件系统镜像。
镜像烧录
在完成上述的镜像构建后,能够经过 tftp 将最终的根文件系统镜像烧录到智龙开发板,相应的指令以下:
在开机后,立刻按下空格键,进入 PMON 环境。
在进入 PMON 环境后,执行以下指令序列完成镜像烧录,和从新启动系统。
擦出 rootfs 分区以及烧录 rootfs 镜像:
PMON> mtd_erase /dev/mtd1
PMON> devcp tftp://192.168.x.xxx/rootfs-yaffs2.img /dev/mtd1 yaf nw
设置内核启动参数:
PMON> set append 'root=/dev/mtdblock1 console=ttyS2,115200 rootfstype=yaffs2'
重启系统:
reboot
在完成 Buildroot 根文件系统烧录以后,能够开始使用本身选择的构建工具,对系统进行测试,或者根据本身的须要对编译的程序进行测试。
在默认的 buildroot 系统中,开机并无默认链接网络。能够经过下述命令链接以太网,以及启用 DHCP 获取 IP 地址。
ifconfig eth0 up
dhcpcd eth0
经过上述两条命令,能够链接以太网络,并启用 DHCP 服务,获取 IP 地址。