本文转载自:https://github.com/pengphei/smartloong-sphinx/blob/master/source/cn/loongson1c_buildroot_guide.rst

Buildroot 龙芯1C支持指南

引子:从龙芯1C预订拿到板子已经很长一段时间了,因为各种事情,一直让它呆在角落的冷宫里。昨天,愤而出去骑行,有导航出错,入的一片幽静山林,正能量爆棚,一下午休息,晚上兴致上来,看了看龙芯的说明,对rootfs部分的构建太过于麻烦,于是夜深人静,开始折腾,经由几个小时鼓捣,终于让buildroot可以支持龙芯1C-智龙开发板rootfs构建。高兴之余,觉得可以将过程写下来,可以让大家了解buildroot的构建机制,对编译工具链选择,系统包指定,以及最后的文件系统打包等都有一个细节的了解。

关于智龙开发板

智龙开发板是由 openloongson 开源社区推出的基于龙芯1C处理器的精简开发板,提供基础的硬件接口,包括一路以太网接口,一路USB Host接口,SD卡存储,2x40 pin io扩展,外置纽扣电源供电RTC。具体的信息可以参考开源龙芯社区网站和论坛。

龙芯 1C 介绍

龙芯1C芯片是基于LS232处理器核的高性价比单芯片系统,具备丰富的外设接口及片上模块,为开发者提供足够的计算能力和多应用的连接能力。可应用于指纹生物识别、物联传感等领域。

龙芯1C包含浮点处理单元,可以有效增强系统浮点数据处理能力。1C的内存接口,支持多种类型的内存,允许灵活的系统设计。支持8-bit SLC NAND或MLC NAND FLASH,提供高容量的存储扩展接口。

龙芯1C的具体用户手册和数据手册可以查看 http://www.loongson.cn/product_info.php?id=53 。

要点准备

  1. 龙芯处理器兼容MIPS32指令集,而且官方提供消息,在新的gcc中是对龙芯各类芯片提供主流的支持。那么也就是说我们可以通过MIPS32的GCC编译工具链编译出能够支持龙芯1C的可执行文件。

  2. 目前在开源社区存在两个非常广泛使用的Linux from scratch 开发平台,即 openWRT 和 Buildroot,两者都对MIPS32提供支持。这里我们选择Buildroot作为基础工具构建适用于龙芯1C的rootfs。

  3. 根据龙芯开源社区或者网上有限的参考资料,智龙开发板使用yaffs2作为根分区文件系统,并且整个Nand Flash分为三个分区。第一个分区为内核分区,第二个分区为根分区,第三个分区为数据区。对应的分区表如下:

    # cat /proc/mtd
    dev: size erasesize name
    mtd0: 00e00000 00020000 "kernel"
    mtd1: 06400000 00020000 "os"
    mtd2: 00e00000 00020000 "data"
  4. 龙芯使用网络烧录 rootfs 指令如下:

    基于 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
  5. 龙芯启动参数设置指令如下:

    基于 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
  6. 龙芯的根文件系统打包方法:

    基于 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 指令。两者由不同的软件包生成,命令也不相同。

Buildroot MIPS 构建

在拿到智龙开发板,并了解了上面的准备工作,就可以开始 MIPS 版本的 Buildroot 构建。目前使用的 Buildroot 来自于 buildroot 的 github 开发版本。构建更多详细信息可以参考它的 操作手册

  1. 获取 Buildroot 源码

    git clone https://github.com/pengphei/buildroot.git
  2. 安装准备软件

    buildroot 的构建需要依赖以下软件或者库:

    • which
    • sed
    • make (3.81及以上版本)
    • binutils
    • build-essential (仅用于Debian衍生版本)
    • gcc (2.95及以上版本)
    • g++ (2.95及以上版本)
    • bash
    • patch
    • gzip
    • bzip2
    • perl (5.8.7及以上版本)
    • tar
    • cpio
    • python (2.6及以上版本)
    • unzip
    • rsync
    • wget
    • ncurses5 (用于 menuconfig 命令行配置界面)
    • qt4 (用于 xconfig 配置界面)
    • glib2, gtk2, glade2 (用于 gconfig 配置界面)
    • 其他的配置,需要根据构建过程中的问题,相应进行添加。
  3. 系统构建

    为了构建出支持智龙开发板可用的镜像格式。在原本的 Buildroot 环境中添加了 yaffs2img 文件系统支持。该包与 Buildroot 中原有的 yaffs2 文件系统构建并不相同,需要特别注意。

    智龙开发板的构建命令如下:

    cd buildroot
    cp configs/loongson1c_smartloong_defconfig .config
    make

    如果希望根据自己的需要,添加自己需要的软件包,可以执行如下命令进行根文件系统软件包的定制:

    make menuconfig

    Note

    上述命令与 linux 内核的配置工具和使用方法完全相同。只是 buildroot 将会从网络上下载自己所需要的基础软件包以及构建工具链,在首次构建时,代码的下载和构建将会需要比较长的时间。

    在 make 命令执行完成之后,会生成 output/images/rootfs.yaffs2img 文件,该文件即为可以烧录到智龙开发板中的根文件系统镜像。

  4. 镜像烧录

    在完成上述的镜像构建后,可以通过 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 地址。

Buildroot 龙芯1C支持指南的更多相关文章

  1. .NET Core 对龙芯的支持情况和对 .NET Core 开发嵌入式的思考

    目录 .NET Core 对龙芯的支持情况和对 .NET Core 开发嵌入式的思考 一,遗憾的尝试 二,.NET Core在嵌入式下的几点不足 三,.NET Core 龙芯移植的进展和资料 .NET ...

  2. 【转贴】龙芯内核发展策略 已经支持k8s

    龙芯内核发展策略 时间:2019-06-27 15:48  来源:未知   作者:龙芯中科   点击:1002次 http://www.loongson.cn/m/view.php?aid=1118 ...

  3. 龙芯 3A4000 安装 Debian10 (via debootstrap)

    由于一些原因,Debian 的内核不能直接在龙芯的 cpu 上使用.据悉 Linux 5.7 kernel 改进了对龙芯的支持,不久的将来我们应该就能更愉快地在龙芯上运行 Debian 了. 感谢龙芯 ...

  4. 龙芯GO!龙芯平台上构建Go语言环境指南

    龙芯软件生态系列——龙芯GO!龙芯平台上构建Go语言环境指南2016-07-05 龙芯中科1初识Go语言Go语言是Google公司于2009年正式推出的一款开源的编程语言,是由Robert Gries ...

  5. 龙芯fedora28日常生存指南

    2021-01-30 v0.0.5 从0.0.1开始改了非常多,一月余时间的花费渴望为其他人提供一点帮助,能够快速上手. 这主要是这一年来我从3B1500到3A4000再到福珑2的日常使用记录,是之前 ...

  6. 【PC桌面软件的末日,手机移动端App称王】写在windows11支持安卓,macOS支持ios,龙芯支持x86和arm指令翻译

    面对这场突如其来的变革,作为软件开发者,应该如何选择自己今后的发展方向?桌面软件开发领域还有前景吗? 起源 自从苹果发布m1处理器,让自家Mac支持IOS移动端app运行之后,彻底打破了移动端app和 ...

  7. X86上搭建交叉工具链,来给龙芯笔记本编译本地工具链(未完待续)

    故事的背景是,我买了一台龙芯2F的笔记本来装B. 为什么说是装B呢?因为不但操作系统是Linux,而且CPU还是龙芯的. 一般人有这么酷的装备吗?简直是装B大圣啊. 这里一定要申明一点,本人不是IT技 ...

  8. 龙芯将两款 CPU 核开源,这意味着什么?

    10月21日,教育部计算机类教学指导委员会.中国计算机学会教育专委会将2016 CNCC期间在山西太原举办“面向计算机系统能力培养的龙芯CPU高校开源计划”活动,在活动中,龙芯中科宣布将GS132和G ...

  9. X86给龙芯笔记本编译本地工具链(未完待续)

    我买了一台龙芯2F的笔记本来当玩具. 买回来发现,这台笔记本上没法安装软件,因为既没有软件仓库,也没有GCC. 因此需要构建交叉工具链和构建本地工具链. 下面是我研究如何搞定着一切的笔记. 工具链组件 ...

随机推荐

  1. AutoItLibrary之键盘操作(send)

    最近有人问到我键盘操作用什么库?用到库里面的哪个方法?我在这里总结一下,第一次写,有片面的地方还请指出,一块进步.1.首先,用到的库是AutoItLibrary,用到的方法是send:按F5可用看到 ...

  2. SPOJ LCS2 多个串的最长公共子串

    这里串最多有10个,找所有串的最长公共子串 这里后缀自动机做,以第一个串建立后缀自动机,后面的串一个个去匹配,每次得到当前串在可到达状态上所能得到的最长后缀长度 拿所有串匹配后得到的结果进行计算 #i ...

  3. ORACLE备份、恢复、常用查询

    --第一,启动服务,(如果数据库处于启动状态,那么略过这一步) 打开命令行执行以下语句  net start OracleServiceORCL  net start  OracleOraDb10g_ ...

  4. idea与eclipse项目相互导入的过程

    idea项目导出到桌面 很简单,直接去项目所在目录考出即可,但是考出的项目往往都特别大,这是因为考出之前  我们不要忘记把idea的输出目录删除 每次启动服务器运行idea项目的时候  都会有一个输出 ...

  5. [NOIP1998] 提高组 洛谷P1013 进制位

    题目描述 著名科学家卢斯为了检查学生对进位制的理解,他给出了如下的一张加法表,表中的字母代表数字. 例如: L K V E L L K V E K K V E KL V V E KL KK E E K ...

  6. 转载:用vector保存对象时保存指针的优点, 以及reserve的使用

    #include <vector> #include <stdio.h> class A { public: A() { printf("A()/n"); ...

  7. hdu 1429 bfs+二进制状态压缩

    开始时候只用了BFS,显然超时啊,必然在结构体里加一个数组什么的判重啊,开始用的一个BOOL数组,显然还是不行,复杂度高,每次都要遍历数组来判重:后百度之,学习了二进制状态压缩,其实就用一个二进制数来 ...

  8. OC-category 为什么不能添加成员变量

    以下的答案是百度的,仅做记录而已: 1. 利用运行时实际上也不是添加成员变量.已编译的类的内存布局是不变的,Class就是一个结构体,里面的成员不能改变.但是通过运行时可以将一个对象或基础类型变成指定 ...

  9. controller跳到另一个controller

    1.无参数: return "redirect:park/findByTag"; 2/有参数: public String addChild(Model model2) model ...

  10. Oracle Spatial中的空间索引

    转自cryolite原文 Oracle Spatial中的空间索引 Oracle Spatial可对空间数据进行R-tree索引,每个空间图层(Spatial Layer)的空间索引元信息都可以在US ...