windows上搭建龙芯1c开发环境

原创 2017年05月22日 10:09:02

思路简介

网上有很多用eclipse+mingw32实现windows上开发环境的,这里也推荐这种方案。

开发环境包括,代码编辑,代码编译,仿真等。其中,代码编辑不是问题,记事本都可以编辑。仿真暂不考虑,听说龙芯的EJTAG暂不支持。现在重点放在代码编译上。
要想在windows上编译龙芯1c的代码,至少需要windows上的交叉编译工具链,然后还需要make。交叉编译工具链采用网友“老鼠”提供的,据说是君正的交叉编译工具链,反君正和龙芯同属mips系列,工具链可以通用也是正常的,经过初步测试可用,如有不能用的地方,可以在虚拟机里面用linux下的龙芯官方提供的交叉编译工具链编译。make采用mingw32-make。

交叉编译工具链下载和安装

交叉编译工具链下载地址http://pan.baidu.com/s/1i4YFrCT

解压后,剪切到目录“D:\Program Files (x86)”内(目录可以根据自己需要修改),如下


将上图中的目录添加到环境变量中,如下


运行测试一下


mingw下载和安装

我这里借用qtcreator里面的,QtCreator默认自带mingw。

同样需要添加环境变量

运行测试一下

编译

进入源码目录,安装“shift”键的同时单击右键,选择“在此处打开命令窗口”,然后执行命令“mingw32-make”。这样就开始按照Makefile文件来编译了,如下



如果换为RT-Thread官网推荐的mips交叉编译工具链的话,则会提示错误,除了交叉编译工具链不一样外,其它的都是一样的,不知何故。

在链接时提示“ABI is incompatible with that of the selected emulation”,暂不知道原因。


测试的代码清单

hello.c

/*	$Id: hello.c,v 1.1.1.1 2006/09/14 01:59:08 root Exp $ */

/*
 * Copyright (c) 2002 Opsycon AB  (www.opsycon.se)
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 *	This product includes software developed by Opsycon AB, Sweden.
 * 4. The name of the author may not be used to endorse or promote products
 *    derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 *
 */

/*
 *   This is a simple program that demonstrate the linkage
 *   between PMON2000 and a loaded program.
 */


struct callvectors {
	int     (*open) (char *, int, int);
	int     (*close) (int);
	int     (*read) (int, void *, int);
	int     (*write) (int, void *, int);
	long long   (*lseek) (int, long long, int);
	int     (*printf) (const char *, ...);
	void    (*cacheflush) (void);
	char    *(*gets) (char *);
};

struct callvectors *callvec;

#define	printf (*callvec->printf)
#define	gets   (*callvec->gets)

int main(int argc, char **argv, char **env, struct callvectors *cv)
{
	callvec = cv;

	printf("\n\nHello!\n\n");
    
	return(0);
}

ld.script

OUTPUT_FORMAT("elf32-tradlittlemips", "elf32-tradbigmips",
              "elf32-tradlittlemips")
OUTPUT_ARCH(mips)
ENTRY(_start)
SECTIONS
{
  . = 0xffffffff81000000;
  .text :
  {
    _ftext = . ;
    *(.text)
    *(.rodata)
    *(.rodata1)
    *(.reginfo)
    *(.init)
    *(.stub)
    *(.gnu.warning)
  } =0
  _etext = .;
  PROVIDE (etext = .);
  .fini : { *(.fini) } =0
  .data :
  {
    _fdata = . ;
    *(.data)
   . = ALIGN(32);
   *(.data.align32)
   . = ALIGN(64);
   *(.data.align64)
   . = ALIGN(128);
   *(.data.align128)
   . = ALIGN(4096);
   *(.data.align4096)
    CONSTRUCTORS
  }
  .data1 : { *(.data1) }
  .ctors :
  {
                __CTOR_LIST__ = .;
                LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)
               *(.ctors)
                LONG(0)
                __CTOR_END__ = .;
  }
  .dtors :
  {
                __DTOR_LIST__ = .;
                LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2)
               *(.dtors)
                LONG(0)
                __DTOR_END__ = .;
  }
  _gp = ALIGN(16) + 0x7ff0;
  .got :
  {
    *(.got.plt) *(.got)
   }
  .sdata : { *(.sdata) }
  .lit8 : { *(.lit8) }
  .lit4 : { *(.lit4) }
  _edata = .;
  PROVIDE (edata = .);
  __bss_start = .;
  _fbss = .;
  .sbss : { *(.sbss) *(.scommon) }
  .bss :
  {
   *(.dynbss)
   *(.bss)
   . = ALIGN(32);
   *(.bss.align32)
   . = ALIGN(64);
   *(.bss.align64)
   . = ALIGN(128);
   *(.bss.align128)
   . = ALIGN(4096);
   *(.bss.align4096)
   *(COMMON)
  }
  _end = . ;
  PROVIDE (end = .);
  .stab 0 : { *(.stab) }
  .stabstr 0 : { *(.stabstr) }
  .debug 0 : { *(.debug) }
  .debug_srcinfo 0 : { *(.debug_srcinfo) }
  .debug_aranges 0 : { *(.debug_aranges) }
  .debug_pubnames 0 : { *(.debug_pubnames) }
  .debug_sfnames 0 : { *(.debug_sfnames) }
  .line 0 : { *(.line) }
  .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) }
  .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) }
}

Makefile

#
#  Makefile to build hello.c
#

#CROSS_COMPILE 	=mipsel-linux-
CROSS_COMPILE 	=mips-sde-elf-

#
# Include the make variables (CC, etc...)
#

AS		= $(CROSS_COMPILE)as
LD		= $(CROSS_COMPILE)ld
CC		= $(CROSS_COMPILE)gcc
CPP		= $(CC) -E
AR		= $(CROSS_COMPILE)ar
NM		= $(CROSS_COMPILE)nm
STRIP		= $(CROSS_COMPILE)strip
OBJCOPY		= $(CROSS_COMPILE)objcopy
OBJDUMP		= $(CROSS_COMPILE)objdump
SIZE		= $(CROSS_COMPILE)size

hello:	hello.c
	${CC} -G 0 -O2 -Wall -fno-pic -mno-abicalls -fno-builtin -nostdinc -mips3 -Ttext=0xffffffff80200000 -N -o hello hello.c -nostdlib -e main -Wl,-m -Wl,elf32ltsmip -T ld.script

clean:
	rm -f hello *.o


更多代码请移步到http://git.oschina.net/caogos/OpenLoongsonLib1c




版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/caogos/article/details/72621417

CTI的典型应用之二

CTI的典型应用之二 ◆ 呼叫中心 晓辉  呼叫中心(Call Center)是CTI应用的一个分支,它能使电话用户通过电话机终端访问计算机存储的信息,就象使用键盘和屏幕终端一样方便。  目前的呼叫中...
  • tchaikov
  • tchaikov
  • 2000-12-20 17:10:00
  • 569

【龙芯1c库】在裸机编程环境中常用的中断接口简介

本文所说的裸机编程是基于“龙芯1c库”的。“龙芯1c库”类似于STM32库,“龙芯1c库”的git地址是https://gitee.com/caogos/OpenLoongsonLib1c 中断对于...
  • caogos
  • caogos
  • 2017-10-05 18:21:08
  • 918

在windows上搭建龙芯1c的RT-Thread开发环境

记录在windows上搭建龙芯1c的RT-Thread开发环境时,遇到的两个问题。
  • caogos
  • caogos
  • 2017-07-11 15:07:41
  • 533

制作交叉工具链(龙芯)

系统环境:ubuntu10.04 + gcc-4.3.3 所需软件:Binutils 2.20: http://ftp.gnu.org/gnu/binutils/binutils-2.20.tar....
  • transistor0
  • transistor0
  • 2013-11-22 15:34:24
  • 718

qemu结合gdb调试龙芯1c的裸机程序helloworld

在qemu上模拟龙芯1c实现裸机版的helloworld,并用自己编译德gdb实现单步调试
  • caogos
  • caogos
  • 2017-09-21 13:46:14
  • 914

【龙芯1c库】封装硬件I2C接口和使用示例

龙芯1c库是把龙芯1c的常用外设的常用功能封装为一个库,类似于STM32库。完整源码请移步到https://gitee.com/caogos/OpenLoongsonLib1c将温湿度传感器AM232...
  • caogos
  • caogos
  • 2017-09-08 10:55:45
  • 1211

GNU的编译器和调试工具

P { margin-bottom: 0.21cm; } GNU的编译器和调试工具 一. 编译工具 1.编辑工具介绍 GNU 提供的编译工具包...
  • yanbixing123
  • yanbixing123
  • 2016-08-24 15:28:11
  • 1249

嵌入式软件调试方法

SdustLiYang的专栏 厚积薄发 目录视图摘要视图订阅 CSDN日报20170401 ——《如果你还是“程序员”,我劝你...
  • yz2010
  • yz2010
  • 2017-04-02 20:17:51
  • 958

交叉编译opencv时候ffmpeg选项始终为no的解决方法

问题来自于在一次在arm开发板上使用opencv的cv::VideoCapture类的open()方法来打开视频文件时候,总是无法成功打开文件,我使用的opencv是3.2.0版的。经过排查,确定是由...
  • woainannanta
  • woainannanta
  • 2017-10-17 14:52:04
  • 566

windows上搭建龙芯1c开发环境

本文主要采用ming32-make和交叉编译工具链为实现龙芯1c裸机程序在windows上的编译...
  • caogos
  • caogos
  • 2017-05-22 10:09:02
  • 1123
收藏助手
不良信息举报
您举报文章:windows上搭建龙芯1c开发环境
举报原因:
原因补充:

(最多只允许输入30个字)