龙芯派教学

龙芯派教学

大、猫 2020-03-19 19:03:17 1359 收藏 8
分类专栏: 龙芯 文章标签: 嵌入式 linux 内核
版权
龙芯派教学
很多小伙伴拿到龙芯派后不知从何下手学习,一脸困惑,本文将解决小伙伴的遇到的困惑。龙芯派默认安装loongxin系统,开机后自动启动到系统下,此时龙芯派可以理解成一台pc机,连接上屏幕、鼠标、键盘就可以在桌面下办公。但很多小伙伴想从“零”开始学习龙芯派,接下来带领大家熟悉龙芯派整个开发流程。

友情提示:高手请跳过

龙芯派软件由:pmon、内核、文件系统组成

框架龙芯派是从sip flash启动的,pmon存在flsah前1M里

一、pmon
1.1 pmon相关资源
1)pmon源码获取
pmon:http://ftp.loongnix.org/loongsonpi/pi_2/source/pmon-loongson3.tar.bz2
解压:

$ sudo tar -xvf pmon-loongson3.tar.bz2
1
2)pmon工具链获取
工具链: http://ftp.loongnix.org/loongsonpi/pi_2/toolchain/gcc-4.4-gnu.tar.gz
解压:

$ sudo tar -zxvf gcc-4.4-gnu.tar.gz -C /
1
解压完在系统的 /opt 目录下得到gcc-4.4-gnu,可以通过ls命令查看 ls /opt
1.2 pmon编译依赖工具安装
1)安装makedepand

$ sudo apt-get install xutils-dev
1
2)安装pmoncfg

$ sudo apt-get install bison flex build-essential patch
$ cd pmon-loongson3/tools/pmoncfg (pmon源码里)
$ make pmoncfg
$ sudo cp pmoncfg /usr/bin
1
2
3
4
1.3 pmon 编译
Pmon采用交叉编译,在源码目录下创建编译脚本,操作如下:
1)在pmon源码pmon-loongson3目录下创建cmd.sh文件

$ sudo vim cmd.sh
1
2)将下面内容写到cmd.sh文件里

#!/bin/bash
cd zloader.ls2k
export PATH=/opt/gcc-4.4-gnu/bin/:$PATH
make cfg
make all tgt=rom ARCH=mips CROSS_COMPILE=mipsel-linux- DEBUG=-g
make dtb
1
2
3
4
5
6
3)修改cmd.sh执行权限

$ sudo chmod 777 cmd.sh
1
4)编译pmon

$ sudo ./cmd.sh
1
5)编译完成后在pmon源码目录下的zloader.ls2k/目录下生成gzrom-dtb.bin
如更改了配置文件Targets/LS2K/conf/ls2k, 则在编译前要执行make cfg, 使得更改生效,如果普通编译没有更改配置,则每次无需都执行make cfg命令。
执行make dtb 可以将dtb和gzrom.bin 结合生成gzrom-dtb.bin,此命令可以在上面编译完成后执行,dtb为设备树。

1.4 pmon 烧写
1)在线更新pmon,启动到pmon命令下

① load -r -f 0xbfc00000 tftp://ip/gzrom-dtb.bin //网络更新
② load -r -f 0xbfc00000 /dev/fs/fat@usb0/gzrom-dtb.bin //U盘更新
1
2
2)ejtag烧写pmon
① linux系统下使用简介
a、ejtag软件下载
网址:ftp://ftp.loongnix.org/embedd/ls1b/ejtag/打开上面的网址下载以ejtag-debug-v×××开头ejtag最新的软件版本,当前最新版本为:ejtag-debug-v3.25.9.tar.gz
b、ejtag安装
命令:

$ tar zxvf ejtag-debug-v3.25.9.tar.gz -C /opt/
1
b、ejtag烧写pmon(二进制文件为gzrom-dtb.bin)

$ cd /opt/ejtag-debug
$ sudo ./ejtag_debug_usb -t
1
2
ejtag里输入:

cpu0 -source configs/config.ls2k
在这里插入图片描述

ejtag里输入:

cpu0 -loop -1 stop
给板卡上电,开机后
ctrl + c 打断
在这里插入图片描述

ejtag里输入:

jtagregs d8 1 1
在这里插入图片描述

注:jtagregs d8 1 1读处理器的ejtag id寄存器,如果是0x20010819或者0x5a5a5a5a都说明连接正确,如果不是则硬件有问题。

ejtag里输入:

program_cachelock /home/tftpboot/gzrom-dtb.bin
在这里插入图片描述

注:执行完program_cachelock命令,默认将/tmp/目录下的gzrom.bin 烧录到芯片里。program_cachelock命令后可以放gzrom.bin的绝对路径,例如:program_cachelock /home/tftpboot/gzrom.bin

② Win系统下使用简介
a、ejtag软件(仅支持win7和XP系统)
网址:ftp://ftp.loongnix.org/embedd/ls1b/ejtag/old/打开上面的网址下载以ejtag-debug-cygwin×××开头ejtag最新的软件版本,当前最新版本为:ejtag-debug-cygwin-v3.25.9.zip
b、驱动安装 注:pwd代表任何位置
ejtag-debug-cygwin-v3.25.9.zip解压到pwd,将ejtag与pc端链接好,此时在设备管理器里看到未知设备,点击未知设备更新,手动更新路径为pwd,操作流程:
在这里插入图片描述
在这里插入图片描述
备注:路径位pwd/ejtag-debug-cygwin
在这里插入图片描述在这里插入图片描述在这里插入图片描述c、烧录写流程
把烧录的gzrom-dtb.bin拷贝到ejtag-debug-cygwin-v3.25.9.zip解压后目录内,将ejtag连接到pc上,另一端连接到龙芯派模块上,进入ejtag-debug-cygwin,双击可执行文件ejtag_debug_usb.exe出现一个命令行终端,如图:
在这里插入图片描述烧写gzrom-dtb.bin方式和linux下操作一样,输入gzrom-dtb.bin 绝对路径,program_cachelock ./gzrom-dtb.bin
如果烧写成功,则最后会返回命令提示符cpu0-;否则烧写失败,请重新检查连接情况。

二、内核
2.1 内核相关资源
1)内核源码获取
内核:http://ftp.loongnix.org/embedd/ls2k/linux-3.10.tar.gz
解压:

$ sudo tar -zxvf linux-3.10.tar.gz
1
2)工具链获取
工具链:http://ftp.loongnix.org/loongsonpi/pi_2/toolchain/gcc-4.9.3-64-gnu .tar.gz
或http://ftp.loongnix.org/embedd/ls3a/toolchain/gcc-4.9.3-64-gnu.tar.gz

解压:

$ sudo tar -zxvf gcc-4.9.3-64-gnu.tar.gz -C /
1
解压完在系统的 /opt 目录下得到gcc-4.9.3-64-gnu,可以通过ls命令查看 ls /opt

2.2 内核编译依赖工具安装
在ubuntu上交叉编译之前需要安装以下库文件:

$ sudo apt-get install -y bison flex
$ sudo apt-get install libncurses5-dev
1
2
2.3 内核配置与编译
1)内核配置

cd linux-3.10
cp arch/mips/configs/loongson2k_defconfig .config
./mymake menuconfig 可以对内核进行图形化配置
1
2
3
2)内核编译

./mymake vmlinuz
1
2.4 内核和文件系统
开发时有需要将内核与文件系统编译到一起,有时需要分开。在内核配置里操作如下:
1)内核和文件系统编译到一起
使用ramdisk文件系统启动内核后,会在内存中形成一个根文件系统,这需要在编译内核时,告诉内核根文件系统所在的目录,把根文件系统编译到内核中。
下面的步骤是如何把根文件系统编译到内核中:
a、内核源码目录下执行 ./mymake menuconfig
用上下键选择General setup —>,执行过上述操作后
在这里插入图片描述蓝色停留在上图位置按 Enter 键进入该选项,并用上下键按照下图所示选择:
在这里插入图片描述黑色选中为[*],蓝色停留在上图位置,单击 Enter 键,输入文件系统的绝对路径,假设文件系统的绝对路径为/home/rootfs/,执行上述步骤后,如下图所示:
在这里插入图片描述
然后保存退出,并通过命令 ./mymake vmlinuz 编译内核。

2)内核和文件系统分开
在这里插入图片描述蓝色位置,括号里为空即可,然后保存退出,并通过命令 ./mymake vmlinuz 编译内核。

三、文件系统
3.1 现成文件系统
文件系统:http://ftp.loongnix.org/…/loongsonpi/pi_2/source/ramdisk_2.tar.gz
或http://ftp.loongnix.org/…/embedd/ls2k/rootfs.cpio.gz
解压:

$ sudo tar -zxvf ramdisk_2.tar.gz
1
注:文件系统是ramdisk_2,如果想与内核编译到一起,配置填写的路径则是ramdisk_2目录的绝对路径

3.2 buildroot
一般文件系统都要包含很多第三方软件,比如busybox,tftp,apache,PHP,DNS,qt等等,为了避免繁琐的移植工作,buildroot应运而生,通过menuconfig来配置我们需要的功能,不需要的去掉,再执行make编译,buildroot就会自动从指定的服务器上下载源码包,自动编译,自动搭建成我们所需要的嵌入式文件系统。
1)buildroo源码获取
http://ftp.loongnix.org/…/embedd/ls2h/buildroot/buildroot.tar.gz
解压:

$ sudo tar -xvf buildroot.tar.gz
1
2)buildroo编译
在buildroot的顶层目录下写个cmd.sh编译的脚本文件,内容如下:

$ cd buildroot
$ vim cmd.sh
1
2
在这里插入图片描述

$ chmod 777 cmd.sh
$ cp configs/ls2k_docker-gcc-4.9.3.config .config
1
2
执行make menuconfig开始配置buildroot:
当前配置是ls2k_docker-gcc-4.9.3.config的默认配置,所以不需要修改,保存推出即可。

执行./cmd.sh开始编译,buildroot编译需要连网,编译完成后,结果在output/target目录里。

$ cd output/target
$ find . | cpio -o -H newc > rootfs.cpio
$ gzip -c rootfs > rootfs.cpio.gz
1
2
3
四、更换内核与文件系统
4.1 在loongnix系统基础上添加启动项
1)从电脑上将内核和文件系统拷贝到U盘里

① cp vmlinuz u盘
② cp rootfs.cpio.gz u盘
1
2
2)将龙芯派启动到系统下后,打开终端,执行

① $ sudo cd /boot
② $ sudo cp u盘/vmlinuz /boot
③ $ sudo cp u盘/rootfs.cpio.gz /boot
1
2
3
④ 修改/boot目录下的boot.cfg文件

$ sudo vim boot.cfg
1
在第四行后添加如下内容:

title loongson ls2k pai test
kernel (wd0,0)/vmlinuz
initrd (wd0,0)/rootfs.cpio.gz
args console=ttyS0,115200 console=tty
1
2
3
4
保存退出
⑤ 重启reboot
4.2 不要loongnix系统,硬盘里只有内核和文件系统
1)将内核和文件放到ssd盘里准备工作
① vmlinuz-ramdisk 带文件系统 (在内核配置里添上文件系统,编译内核生成的vmlinuz,将vmlinuz修改名称为vmlinuz-ramdisk防止混交)
② vmlinuz 不带文件系统 (内核配置里去掉文件系统配置,编译内核生成vmlinuz)
③ 文件系统rootfs.cpio.gz (从ftp网址获取)
2)准备boot文件夹
① 创建一个文件夹,起名为boot
② 将vmlinuz和rootfs.cpio.gz拷贝到boot目录下
③ 在boot目录下创建文件boot.cfg,boot.cfg里内容如下

timeout 5
default 0
showmenu 1

title kernel or fs on ssd
kernel /dev/fs/ext2@wd0/boot/vmlinuz
initrd /dev/fs/est2@wd0/boot/rootfs.cpio.gz
args console=tty console=ttyS0,115200
1
2
3
4
5
6
7
8
3)启动到pmon命令行下(启动时按C即可进入pmon 命令行下)

① load tftp://ip/vmlinuz-ramdisk //网络加载
或 load /dev/fs/fat@usb0/vmlinuz-ramdisk //u盘加载,上电前将U盘插到板卡
② g console=ttyS0,115200 rdinit=/sbin/init
1
2
3
4)启动到内核下
假如ssd硬盘盘符是/dev/sda
① 使用fdisk命令对硬盘分区(存放内核只能放到第一分区里,否则pmon找不到)

$ fdisk /dev/sda
1
② 使用mkfs.ext2 对/dev/sda0格式化

$ mkfs.ext2 /dev/sda0
1
③ 挂载/dev/sda0分区

mount /dev/sda0 /mnt/
1
④ 将boot文件夹从U盘拷贝到mnt目录下 (u盘也需要手动挂载)

$ cp “u盘/boot” /mnt -ad
$ sync
1
2
⑤ 拷贝完成后卸载硬盘和u盘

umount /mnt/
1
⑥ 拔掉u盘后重启

reboot
1
备注:因为pmon下只能对ssd盘进行读取,不能写入数据,所以往ssd盘里写数据必须先启动一个带文件系统的内核镜像,然后启动到内核下再对ssd盘操作。

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值