weimingtom / wmt_mips_study

My MIPS study

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

wmt_mips_study

My MIPS study

FPGA

TODO

romfs
YC-ZXID-YX-V2001.img
见qq邮箱
romfser-master
uclinux


https://blog.csdn.net/qq_30135687/article/details/130288776?spm=1001.2014.3001.5502
https://blog.csdn.net/qq_30135687?type=blog
https://blog.csdn.net/qq_30135687/article/details/130410801?spm=1001.2014.3001.5502
http://ftp.loongnix.cn/embedd/ls1b/


ARM7模拟器for linux
SimIt-ARM.rar
https://sourceforge.net/projects/simit-arm/
## SimIt-ARM, with C++, ARM7, provide sa1100 and colibri linux images in sourceforge, like skyeye  
* https://sourceforge.net/projects/simit-arm/    
* https://github.com/dmlockhart/simit-arm



https://github.com/nihcdsv/nihao

平衡车
https://gitee.com/weidongshan/100ask_r128_demos
https://www.bilibili.com/video/BV1Fg4y197Vh/?spm_id_from=333.337.search-card.all.click&vd_source=8aac237d3ed1fe24370f8df03ab1993d


gxemul运行不了龙芯,可能需要自己编译lemote_2f
linux-3.10.tar.gz\linux-3.10\arch\mips\configs - TAR+GZIP 压缩文件, 解包大小为 1,341,937,926 字节
lemote2f_defconfig
http://ftp.loongnix.cn/embedd/ls1a500/linux-3.10.tar.gz


基于龙芯1C智龙开发板的 龙芯嵌入式开发入门教程
https://www.bilibili.com/video/BV1Zt411U7pW/?spm_id_from=333.999.0.0&vd_source=8aac237d3ed1fe24370f8df03ab1993d

(TODO) csdn todo:

  • (TODO) gxemul-0.4.3_可以仿真龙芯处理器的模拟器Godson
  • (TODO) MIPS-OS从JOS移植的具有用于MIPS R3000的Shell的定制操作系统
  • https://github.com/BXYMartin/MIPS-OS

TODO, gcc -S, asm volatile, for QtSpim

  • (TODO) (IMP) use gcc-2.95.3 cross mips to gcc hello.c -S -mno-explicit-relocs, need comment jal __ main, why ???
jal	__main
    asm volatile(
        "add $a0, $zero, %0;"
        "addi $v0, $zero, 4;"
        "syscall;"
	:
	:"m" ("The sum from 0 .. 100 is "));
  • use la ???, instead %lo() and %hi(), see -mno-explicit-relocs (high version gcc not support ???)
	la $3, $LC0
	add $a0, $zero, $3
	addi $v0, $zero, 4
	syscall;

barebone hello, for qemu -machine mipssim

#LOADADDR = 0xa0040000
LOADADDR  = 0x81000000
RAMSIZE = 0x00100000		# 1MB
# or 0x1000 # 4k

CC =       $(CROSS_COMPILE)gcc -EL -fno-builtin
LD =       $(CROSS_COMPILE)ld -EL
//#define         BASE                    0xb0000080
#define         BASE                    0xbfd003f8
//mips:    0xb4000000;
//mipssim: 0xbfd00000;
//#define UART0_ISA_OFF   0x3f8

doc

mips linux (vmlinux), for qemu -machine mipssim (and for -machine mips)

----
xubuntu200464

$ cd busybox-1.20.2
$ make ARCH=mips CROSS_COMPILE=mipsel-linux-gnu- defconfig
$ make ARCH=mips CROSS_COMPILE=mipsel-linux-gnu- menuconfig
Build Options--->Build BusyBox as a static binary(no shared libs)
Login/Password Management Utilities--->passwd(uncheck)
Miscellaneous Utilities--->time(uncheck)
Networking Utilities--->inetd(uncheck)ntpd(uncheck)
Runit Utilities--->all(uncheck)
#if 0 to shell/shell_common.c printlim inside
#if 0 to shell/shell_common.c shell_builtin_unlimit(char **argv) inside

https://github.com/fdu/STM32F429I-disco_Buildroot/issues/1
Init Utilities--->init->Support reading an inittab file(uncheck)
comment_ strings (tty2...4) in file nit/init.c
/*new_init_action(ASKFIRST, bb_default_login_shell, VC_2);
new_init_action(ASKFIRST, bb_default_login_shell, VC_3);
new_init_action(ASKFIRST, bb_default_login_shell, VC_4);*/

$ make ARCH=mips CROSS_COMPILE=mipsel-linux-gnu-
$ make ARCH=mips CROSS_COMPILE=mipsel-linux-gnu- install
$ tar czf install.tar.gz _install/

-------------
ubuntu140432

$ tar xzf install.tar.gz
$ cd _install
$ mkdir -p proc sys dev etc etc/init.d
$ gedit ./etc/init.d/rcS
#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
/sbin/mdev -s
ifconfig lo up
ifconfig eth0 10.0.2.15 netmask 255.255.255.0
route add default gw 10.0.2.1
$ chmod +x ./etc/init.d/rcS
$ cp etc/init.d/rcS rcS
$ cd /dev
$ sudo mknod -m 660 console c 5 1
$ sudo mknod -m 660 null c 1 3

$ cd ../linux-3.5.7/
$ make ARCH=mips CROSS_COMPILE=/home/wmt/work_xv6_mips/mips-2015.05/bin/mips-sde-elf- menuconfig
General setup--->Initramfs source file(s): /home/wmt/work_mips_linux/_install/
Kernel hacking--->root=/dev/ram rdinit=/linuxrc init=/linuxrc
$ make ARCH=mips CROSS_COMPILE=/home/wmt/work_xv6_mips/mips-2015.05/bin/mips-sde-elf-

$ qemu-system-mipsel -M mipssim -kernel vmlinux -nographic
------------------
can't open /dev/tty2: No such file or directory
can't open /dev/tty3: No such file or directory
can't open /dev/tty4: No such file or directory
see https://github.com/fdu/STM32F429I-disco_Buildroot/issues/1

loongson linux (vmlinux), ls1b defconfig, linux-2.6.3, 4.19, 5.3, for qemu (need src mod) -machine ls1b

root=/dev/ram console=ttyS0,115200 rdinit=/linuxrc 
  • how to build busybox and linux 5.2
xubuntu200464  
sudo apt install gcc-mipsel-linux-gnu
xubuntu200464  

$ cd busybox-1.20.2
$ make ARCH=mips CROSS_COMPILE=mipsel-linux-gnu- defconfig
$ make ARCH=mips CROSS_COMPILE=mipsel-linux-gnu- menuconfig
Build Options--->Build BusyBox as a static binary(no shared libs)
Login/Password Management Utilities--->passwd(uncheck)
Miscellaneous Utilities--->time(uncheck)
Networking Utilities--->inetd(uncheck)ntpd(uncheck)
Runit Utilities--->all(uncheck)
* Then, (modify shell/shell_common.c) put '#if 0.. #endif' to shell/shell_common.c's 
printlim() inside, comment inside code
* Then, (modify shell/shell_common.c) put '#if 0.. #endif' to shell/shell_common.c's 
shell_builtin_unlimit(char **argv) inside, comment inside code

* see https://github.com/fdu/STM32F429I-disco_Buildroot/issues/1
Init Utilities--->init->Support reading an inittab file(uncheck)
* Then (modify nit/init.c, put /*...*/ inside) comment strings (tty2...4) in file nit/init.c, like this:
/*new_init_action(ASKFIRST, bb_default_login_shell, VC_2);
new_init_action(ASKFIRST, bb_default_login_shell, VC_3);
new_init_action(ASKFIRST, bb_default_login_shell, VC_4);*/

$ make ARCH=mips CROSS_COMPILE=mipsel-linux-gnu-
$ make ARCH=mips CROSS_COMPILE=mipsel-linux-gnu- install
(for busybox)

$ cd _install
$ mkdir -p proc sys dev etc etc/init.d
$ gedit ./etc/init.d/rcS
#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
/sbin/mdev -s
ifconfig lo up
ifconfig eth0 10.0.2.15 netmask 255.255.255.0
route add default gw 10.0.2.1
$ chmod +x ./etc/init.d/rcS
$ cp etc/init.d/rcS rcS
$ cd /dev
$ sudo mknod -m 660 console c 5 1
$ sudo mknod -m 660 null c 1 3
(for linux)

$ make ARCH=mips CROSS_COMPILE=mipsel-linux-gnu- loongson1b_defconfig
$ make ARCH=mips CROSS_COMPILE=mipsel-linux-gnu- menuconfig
General setup--> Initial RAM filesystem and RAM disk (check)
	Initramfs source file(s): /home/wmt/work_loongson/_install/
kernel hacking--->Built-in kernel command line
	(x) default string: root=/dev/ram console=ttyS0 rdinit=/linuxrc init=/linuxrc
	default string: root=/dev/ram console=ttyS0,115200 rdinit=/linuxrc
$ make ARCH=mips CROSS_COMPILE=mipsel-linux-gnu-

pmon (a bootloader for loongson) for loongson (here not boot vmlinux), for qemu (need src mod)-machine ls1b

xubuntu 200464
prepare, see https://github.com/sergev/qemu/wiki
$ sudo apt-get install libpixman-1-dev libfdt-dev zlib1g-dev libglib2.0-dev libsdl-dev
see 	(IMP) qemu loongson build mothod!!!!
see 	(IMP) pmon loongson build mothod!!!!
(build qemu source mod for ls1b)  
$ git clone https://gitee.com/loongsonlab/qemu
$ cd qemu
$ mkdir build2
$ cd build2
$ ../configure --target-list=mipsel-softmmu --disable-werror --prefix=/home/wmt/work_pmon/qemu_pmon2
$ make
$ make install
(build pmon for ls1b)  
$ cd ../../loongson1-pmon  
$ ./build_ls1b_dev.sh  
(get pmon_ls1b_dev.bin)  
  • run method:
$ cd qemu_pmon2/bin
$ SERIAL=2 ./qemu-system-mipsel -M ls1b -serial stdio -bios pmon_ls1b_dev.bin 

xv6-mips, for qemu -machine mips (and -machine mipssim is ok, need modification)

ucore, ucore-thumips (and for qemu -machine mipssim?)

hos-mips, based on Tsinghua ucore OS, can run with gxemul 0.6.1 mod

rt-thread 20201229, for qemu -machine mipssim

Topsy, for mipseb, run on Java Simulator (MipsSimulator)

 .rodata . : AT( 0x80040000 + ADDR(.rodata) )
 .data . : AT( 0x80040000 + ADDR(.data) )
 .sbss . : AT( 0x80040000 + ADDR(.sbss) )
 .bss . : AT( 0x80040000 + ADDR(.bss) )
/* make 0x80040000 offset to every segment */

BUAA-OS, run on gxemul

xinu, for qemu mipsel -machine mips (mipssim not work)

os161, running on C simulator (sys161, for mipseb)

(TODO) loongson / godson fpga

(TODO) naken_asm

(TODO) qtspim

  • https://pages.cs.wisc.edu/~larus/HP_AppA.pdf
  • https://sourceforge.net/p/spimsimulator/code/HEAD/tree/
  • https://pages.cs.wisc.edu/~larus/spim.html
  • https://ecs-network.serv.pacific.edu/past-courses/2012-fall-ecpe-170/tutorials/qtspim-tutorial
  • QtSpim的数据段代码段可能是某种古老r3000机器的布局,但似乎也兼容mips32。我以前以为设置中的异常处理器是
    打开一个程序,其实是用来替换内置的boot汇编文件,或者不使用boot代码:
  • 可以加载多个.s汇编文件,会连接加载到同一个text段内,接在上一个的末尾。但不能批量添加,
    需要手工逐个加。所以加载汇编文件的菜单操作其实相当于接在内置异常处理器的.text段代码后面。
  • 汇编文件中.text的起始地址(例如.text 0x400000)参数只允许一定规则的偏移,例如只能40_0080
  • 汇编文件中.text和.ktext必须在text段和ktext段范围内,例如40_0000至44_0000之间。这个范围似乎是固定的
  • 设置中的异常处理器就是ktext段bootloader的代码(详细见spimsimulator源代码仓库中的exceptions.s,
    可以在sf的仓库中看到qtspim的源码)
  • 如果去掉异常处理器前面的勾,然后重启qtspim,或者菜单Reinitial Simulator,8000_0000的代码会清空。
    也可以自己参照exceptions.s的代码替换自己的boot汇编
  • 实际上设置中关闭内置的异常处理器汇编(去除勾),也可以正常运行汇编。可以通过菜单中Run Parameter
    修改运行的起始地址,默认是40_0000。对运行的影响比较少,仍然可以syscall,只是运行到最后可能会报错,或者用单步运行
  • 有时候菜单Reinitial Simulator也会出问题,导致加载汇编文件失败。最好是重启exe
  • 我觉得设置中的bare machine按钮没什么用,似乎无法修改段的起始地址的规定范围,几乎总是用simple machine就可以了

retrobsd

retrobsd qemu

  • sergev/qemu模拟retrobsd的问题解决了。为什么无法加载到sdcard,是因为qemu代码中(对应max32开发板)的
    sdcard针脚设置和unix.hex里面的sdcard针脚不同,改一下就可以了(把qemu代码中的片选脚改成D4,从输出信息中可以看到)。
    不过这个qemu似乎无法运行最新版的retrobsd,但我试验过编译旧版的retrobsd是可以运行的
  • https://github.com/sergev/qemu/wiki/RetroBSD-Example
  • work_retrobsd_qemu_v2_success_old_rom.tar.gz
  • work_retrobsd_qemu_v3_build_retrobsd_and_run.tar.gz
  • https://github.com/sergev/qemu/blob/master/hw/mips/mips_pic32mx7.c, search BOARD_MAX32
    need to change to D4 and SPI4
        s->sdcard_spi_port = 3;/*1;*/             // SD card at SPI2,
        cs0_port = 3;/*2;*/  cs0_pin = 3;/*14;*/        // select0 at C14,
        cs1_port = -1;/*3;*/  cs1_pin = -1;/*1;*/         // select1 at D1
/home/wmt/work_retrobsd_qemu/qemu-mips/bin/qemu-system-mipsel 
-machine pic32mx7-max32  -serial stdio -bios boot-max32.hex 
-kernel unix_build.hex -sd sdcard_build.img 
  • login: root, password: none

litebsd

(TODO) virtualmips

v6pic32

nachos

uclinux on psp 0.22

qemu-mt7628

(TODO) openwrt mips, for qemu -machine malta

(TODO) buildroot mips, for qemu -machine malta

rcore, Rust version of THU uCore OS Plus

virtualnoah, NP1100, JZ4740, qemu-NP_120730

skyeye, for mips au1100 and gs32eb1

  • skyeye-1.3.5_rc1.tar.bz2
  • skyeye-testsuite-1.3.4_rc1.tar.gz
  • skyeye-testsuite-1.3.4_rc1\skyeye-testsuite\dyncom\hello-mips
  • skyeye-testsuite-1.3.4_rc1\skyeye-testsuite\dyncom\hello_gs32eb1

PIC32 Architecture and Programming

chipkit uno32

pinguino32, PIC32

crosstool-ng

$ ct-ng mips-unknown-elf
$ ct-ng menuconfig 
$ ct-ng build

(TODO) mips32r1_xum, verilog and bare program

(TODO) armadillo

CS3650_MIPS32ALU

NaiveMIPS

step_into_mips

minimips32

picomips

edu.cornell.cs3410, mips logisim, cs3410.jar

mipsfpga-plus, schoolMips, xilfpga

mips, nscscc

(TODO) freertos

imgtec CI20, JZ4780,Creator Ci20, linux, android, openwrt

Creator Ci40, openwrt

malta

(TODO) cemu, seem can load vmlinux (no mips kernel config doc ???) and ucore

(TODO) NJU-ProjectN, nemu for mips, etc (only tested in x86)

f32c

MangoMIPS32

OpenMIPS, 自己动手写CPU

build-a-cpu, logisim

MiniMIPS32

nontrivial-mips

MIPS246 Compiler & Assembler

cii, C Interfaces and Implementations, C语言接口与实现

RIOT, before 2022.09

zephyr, qemu machine malta

nuttx, for pic32m

(TODO) ucosii

Simulizer, for r3000

RTEMS

tcc, tinycc, tinycc-mips

  • https://github.com/lhzhang/tinycc-mips
  • 我发现有人吐槽tinycc(通常叫tcc)不支持MIPS,太难了(可不可以照着RISC-V来改),不过另一个编译器clang应该是可以输出MIPS的机器码

gcc

>mipsel-ecoff-gcc -v
Reading specs from ../lib/gcc-lib/mipsel-ecoff/3.0.4/specs
Configured with: ../gcc-3.0.4/configure --prefix=/usr/local/mipsel-ecoff --target=mipsel-ecoff 
--disable-shared --disable-nls --with-gnu-as --with-gnu-ld
Thread model: single
gcc version 3.0.4

clang, llvm-gcc

lcc

qemu

mips_os

从一道mips题目学习搭建mips环境及ROP

X1000 RT-Thread-XBurst

qemu, mipsel firmware emulation for auto-testing purposes

u-boot, u-boot qemu

aoR3000, for r3000

vmips, for r3000

cui32

discobsd

picsimlab

UBIBoot

xburst

Cfern, mipsem, busybox-mips

龙芯LoongIDE

  • mips-2015.05_from_sdelite_4.9.2_for_mips.rar
  • LoongIDE_from_loongide_1.2_beta3_setup.rar
  • loongide_1.2_beta3_setup.exe

(TODO) Educational kernel/rtos implementation for MIPS Malta QEMU

arm_now

sysmips, in Java (need JDK8)

pcsx2

nu32

CuRT_v1_MIPS

pic32, uno32

  • 经过我的努力,终于把变砖的uno32救回来了。之前没办法烧录bootloader的原因也找到了,
    是因为杜邦线的问题,导致无法检验设备id,我把杜邦线反转次序就正常了。
    烧录也不是很明白,我用的是IPE v6,但我不清楚怎么烧录成功的,
    可能是因为我勾选了高级模式,Allow Memory View,Program Memory,
    也可能不是这样做(待考),我先烧录一个别的hex再烧录bootloader,
    最后要拔出pickit3才能看到闪灯(?)
  • 只需要烧录bootloader,然后拔掉pickit3,就可以看到闪灯效果,不需要再烧录其他hex文件
  • 如果出现识别不到设备id,或者提示电压不够,
    请检查杜邦线是不是可能有一根不通(例如反转过来次序重新接或更换新的),
    或者重新插拔pickit3的usb

Fishino32, PIC32MX470F512HI/MR

(TODO) yamon, mips bootloader

TinyMIPS

(IMP) MIPS SDE-lite, sde-gcc, sde-run, sde-gdb, for Windows / Cygwin and Linux

在Windows下运行SDE单步调试MIPS hello程序,首先安装SDE,把COD3E,
计算机组成与设计这本书的光盘中的Cygwin版SDE安装到Msys下,
把/sde/bin添加到/etc/profile代码中加入PATH变量值中,
把sde\sde\include\mips复制到sde\sde\include\machine目录(缺少符号链接),
切换到sde\sde\examples\hello
然后用make SBD=GSIM32L编译(不要用sde-make,因为不是cygwin),
再用sde-run helloram运行。
然后用sde-gdb helloram打开图形界面调试器(和其他gdb不同,这个默认是图形界面,
也可以用-nw开关关闭图形界面),
点击左上角的运行按钮(跑步图标),选择GNU Simulator(相当于target sim),
点击控制台图标,
然后步进即可在控制台中看到输出(类似于sde-run的效果)
如果是sde-gdb -nw helloram,则是:
$ sde-gdb -nw helloram
(gdb) target sim
(gdb) load
(gdb) b main
(gdb) r
(gdb) q
具体请参考sde-guide.pdf的第4章Page 22.  
其实MIPS古老开发套件SDE中,SDE-GDB没有标是什么软件,看上去是tcl/tk风格的界面,
代码是gdbtcl。可以用来研究MIPS汇编。我找了一下,应该是根据linux软件insight调试器
(或者叫Cygnus Insight Debugger,或者叫gdbtk)改出来的。除了Insight,
还有别的常用gdb图形调试工具,例如ddd(也是基于tcl)和gdbtui(gdb内置功能)
  • copy cygwin1.dll to /sde/bin, dll file is from WinAVR-20100110-install.exe

mraa, libmraa

HUST OS ???

  • 华中科技大学计算机学院计算机组成原理课程设计, logisim run hex (?)
  • https://github.com/Starrylay/awesome-HUST-CS-MIPS-CPU
  • https://github.com/ver217/MIPS-CPU-TOY
  • mips-probe.jar
  • cs3410.jar
  • java -jar logisim-hust-20200118.exe
  • some risc-v
  • some mips java emulator code is in cs3410.jar
  • 有人做了logisim的mips器件插件,用于模拟mips,叫cs3410.jar,
    出处不详(可能是外面的课程,可能是闭源的),可以反编译,
    看到里面好像是有一个Java写的mips汇编器。。。
    有人甚至把它改成risc-v版和arm版。。。
    我没试过,有课程用到这个东西去模拟mips的cpu,
    有本叫《计算机组成原理实践教程——从逻辑门到CPU》
  • cs3410.jar: edu.cornell.cs3410.ProgramAssembler#main: 汇编器
usage: ProgramAssembler <mips-asm-file>  
  • mips-probe.jar: hust2020.Probe2#paintInstance: 反汇编器
  • Mars4_5.jar, MIPS汇编工具及测试用例4.7, 很多可以用mars运行的汇编例子

MIPS Embedded OS (MEOS)

君正 X1500 ???

mipseltools-gcc412-lnx26, 君正jz4740 gcc toolchain

(TODO) qemu-JZ, jz-hacking google code archive

JZ4740 Pavo Board

JZ4740 MIPS version

君正m150_cnx-software

  • https://www.cnx-software.com/2015/02/10/ingenic-halley-is-20-linux-based-iot-board-with-wi-fi-and-bluetooth-4-1-connectivity/
  • https://imgtec.eetrend.com/d6-imgtec/forum/2015-02/4851.html
  • $ export PATH=path/to/SDK/binaries/toolchain/mips-gcc472-glibc216/bin:$PATH
    $ export CROSS_COMPILE=mips-linux-gnu-
    uboot:
    $ make halley_uImage_spinor
    kernel:
    $ make halley_linux_defconfig
    $ make uImage
  • 提醒:
    文件系统默认挂载ramdisk(rootfs.cpio.gz),若要使用WIFI需将ramdisk更改为(rootfs_wifi.cpio.gz),两个ramdisk都支持ADB。
    ramdisk 修改路径:arch/mips/xburst/soc-4775/chip-m150/halley/common/
    烧录工具:
    烧录工具已经存放到代码目录下,其下载路径:binaries/host-tools/BurnerBinary/latest-halley-linux-burner
    注意,0.25.1烧录工具烧录Halley,使用配置暂时如下:
    1,平台:4775
    2,板级:gemini_spi_lpddr.cfg
    系统操作中注意事项:
    1,WIFI 信号不好,需外接天线,同时WIFI距热点较远时,信号衰减较大,频偏未校准,建议使用airkiss调试时靠近WIFI热点(三米以内)。
    2,系统启动进入Buildroot时,密码为:root

君正jz4740_pavo开发板

IngenicHAL

Ingenic T31

opendingux buildroot and linux and qemu-system-mipsel

mimiker

gcc for baremetal

  • Codescape.GNU.Tools.Package.2021.09-01.for.MIPS.IMG.Bare.Metal.Windows.x86_64.tar.gz
  • mips-2015.05-19-mips-sde-elf-i686-pc-linux-gnu.tar.bz2

MT7688 TFT

CPU设计实战

  • 这本mips书也不错,是龙芯自己出的。进阶,讨论AXI和SoC问题,或者说它讨论更复杂的测试问题。
    以后打算买来收藏,暂时不看,因为这本偏难。这本书用的开发板是为XC7A200T(系列最高配),
    Vivado 2019.2。甚至还有云端的FPGA开发

MIPS ASM Space Invaders

moo_compiler

芯联芯, 技术资源

About

My MIPS study