Chinaunix首页 | 论坛 | 博客
  • 博客访问: 123672
  • 博文数量: 44
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 55
  • 用 户 组: 普通用户
  • 注册时间: 2015-04-16 10:13
个人简介

努力成为大神~

文章存档

2018年(4)

2016年(40)

我的朋友

分类: 嵌入式

2018-01-22 21:58:50

 

龙芯目前使用PMON作为自己的BootLoader,然后开源的资源为添加了基于龙芯适配的Linux操作系统,最近上官网貌似发现其还提供了vxworksBSP资源,感兴趣的大家可以上龙芯官网上看看,坐标为龙芯开源社区

要是链接进不去就百度龙芯开源社区吧。。。。。因为之前接触的为龙芯2H,所以就主要以龙芯2H平台聊聊。

关于资源下载

在开源社区里面提供了最新版的PMONLinux,内容都是针对龙芯2H的官方开发板。

关于编译工具

根据龙芯自己的手册介绍,编译PMON需要使用mipsel-linux-gcc工具,而编译Linux需要使用mips64el-linux-gcc,因此针对PMONLinux龙芯分别提供了单独的编译工具。在龙芯的开源社区和ftp服务器上均有下载,同时这里有一点,不知道是否有变化,之前直接使用开源社区中下载的Linux编译工具,在使用pthread时,会提示库的路径不存在,然后提示一堆不存在的文件路径,后来进行研究发现,可能是工具在进行路径打包时,设置了一个绝对路径,如果用户将编译工具解压到同其相同的路径时,就可以编译通过,不然会一直提示库路径错误。所以这里使用的是ftp服务器上的版本。

因为龙芯PMONLinux的交叉编译工具不同,所以这里没有采用将其添加到环境变量中的方式,而是编写了两个保存环境变量的sh文件,分别命名为pmon-env.shlinux-env.sh,对于pmon交叉编译工具,首先进行解压

点击(此处)折叠或打开

  1. # mkdir -p /usr/local/comp/mips-elf/
  2. # tar -zxvf gcc-4.4.0-pmon.tgz -C /usr/local/comp/mips-elf/

之后再pmon-env.sh中添加如下内容:



点击(此处)折叠或打开

  1. export LD_LIBRARY_PATH=/usr/local/comp/mips-elf/gcc-4.4.0-pmon/lib:
  2. export CROSS_COMPILE=mipsel-linux-
  3. export PATH=/usr/local/comp/mips-elf/gcc-4.4.0-pmon/bin/:$PATH


同理解压Linux的交叉编译工具,解压路径为/usr/local,之后在linux-env.sh中添加如下路径。


点击(此处)折叠或打开

  1. export PATH=/usr/local/gcc-4.4-64-gun/bin/:$PATH


将两个sh文件的权限修改为777。当需要使用哪个编译工具时就source使其生效,当要使用另一个时则新开一个终端source另一个。这里可能大家觉得麻烦,也可以直接将路径全部添加至environment或者bash_profile中,可以根据自己的需求去做。

关于编译和烧写

    编译的前提为交叉编译工具均已生效,
    对于编译pmon,这里以龙芯2H为例,首先进入解压后的pmon根目录,编译生成配置PMON 所需要的pmoncfg 工具,命令如下:


点击(此处)折叠或打开

  1. cd pmon_dir
  2. cd tools/pmoncfg
  3. make
  4. cp pmoncfg /usr/bin

之后



点击(此处)折叠或打开

  1. cd zloader.ls2h
  2. make cfg
  3. make tgt=rom



生成的gzrom.bin即为目标文件,如果设备中不存在pmon,则需要通过ejtag进行烧写,不然可以直接使用网络在线加载,命令为


点击(此处)折叠或打开

  1. Pmon >load –r –f 0xbfc00000 tftp://xxx.xxx.xxx.xxx/gzrom.bin(xxx.xxx.xxx.xxx为PC机IP地址)


对于编译Linux

修改Linux源代码根目录下的Makefile文件,修改文件中的ARCHCROSS_COMPILE两个选项,内容如下:

ARCH             ?= mips64el

CROSS_COMPILE   ?= mips64el- linux-

接着拷贝配置文件

cp arch/mips/configs/loongson2h_defconfig .config

最后make

会分别生成vmlinuxvmlinux.32,所以vmlinux64位,vmlinux.3232位,这里使用vmlinux

烧写前需要保证PMON中添加了NAND的支持,不然就得去找patch进行升级更新。

PMON中对于NAND的分区位于Targets\LS2H\include\ pmon_target.h文件中,具体为

#define MTDPARTS "nand-flash:10M@0(kernel)ro,-(rootfs)"

这里根据自己的需求进行空间修改即可,并且需要注意这里的分区得同Linux下的分区统一,不然会出错。

PMON>mtd_erase /dev/mtd0

之后使用的烧写镜像指令为:
PMON>devcp tftp://192.168.xxx.xxx/vmlinux.32 /dev/mtd0

同时之前在我使用的PMON中没有添加yaffs文件系统的烧写支持,所以如果想使用yaffs文件系统,则需要修改pmon中的代码。之前尝试进行修改,但没有成功,所以使用jiffs2文件系统,如果有大神,希望能不吝分享~

PMON>mtd_erase /dev/mtd1  

PMON>devcp tftp://192.168.x.xxx/rootfs-jffs2.img /dev/mtd1   

 

这里对烧写进行一个小归纳

当板上无PMON时:

使用ejtag烧写,在linux下运行,将gzrom拷贝到tmp后,

sudo ./ejtag_debug_usb

source config/config.ls2h

call program_cachelock

板上有PMON时:

load -r -f bfc00000 tftp://XXX.XXX.XXX.XXX/gzrom.bin

xxx.xxx.xxx.xxx为主机IP地址

烧写Linux内核和根文件系统镜像

mtd_erase /dev/mtd0

devcp tftp://XXX.XXX.XXX.XXX/vmlinux /dev/mtd0

mtd_erase /dev/mtd1

devcp tftp://XXX.XXX.XXX.XXX/rootfs-xxx.img /dev/mtd1

设置启动参数

对于 Cramfs文件系统:

PMON>set append ‘root=/dev/mtdblock1 console=ttyS0,115200 noinitrd init=/linuxrc rootfstype=cramfs’  

Jffs2 文件系统:

PMON>set append ‘root=/dev/mtdblock1 console=ttyS0,115200 noinitrd init=/linuxrc rw rootfstype=jffs2’

对于制作不同的文件系统,具体流程如下:

1Cramfs

#mkfs.cramfs –b 16384 XXX/rootfs rootfs-cramfs.img

其中-b 是设置块大小,后面的数值是根据NAND FLASHblock大小有关,需要同NAND FLASH匹配,这里选为16384这里如果没有设置正确,在启动时会打印类似error -3 while decompressing!  8497b9ec(2060)->85370000(16384)的错误,所以需要特别注意。

#chmod 777 rootfs-cramfs.img    //修改文件系统权限,防止出现无法烧写的情况

2Jffs2  

#mkfs.jffs2 -r /XXX/rootfs -o rootfs-jffs2.img -e 0x20000 --pad=0x2000000 –n

#chmod 777 rootfs-jffs2.img      //修改文件系统权限,防止出现无法烧写的情况

mkfs.jffs2 各参数的意义:

-r:指定要生成 image的目录名。

-o:指定输出 image 的文件名。

-e:每一块要擦除的block size,不同的flash,其block size 会不一样。这里为128KB

--pad:用16进制来表示所要输出文件的大小,也就是rootfs-jffs2.img的大小,如果实际大小不足此设定的大小,则用 0xFF 补足。--pad的大小可以根据自身需求进行相应的修改。

-n-no-cleanmarkers:指明不添加清楚标记(NAND FLASH有自己的校检块,存放相关的信息)。



阅读(1969) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~