MIPS Linux 下添加系统调用

MIPS Linux内核编译构建环境的搭建 AI的端侧应用离不开各种算力平台,目前形成了CPU+NPU,CPU+FPGA以及CPU+GPU的几类算力搭配,他们各有优势,也各有弱点。先看它们的共同点,从组合名字可以看出,这些组合场景都需要CPU,这是因为NPU,FPGA和GPU的架构特点决定了它们在流水线pipeline,逻辑处理和控制方面要弱于CPU,所以通常作为专用算力加速器的协处理器。 阅读详情

 
添加一个系统调用有以下几个步骤:

1.  在 kernel 的系统调用表 sys_call_table 中添加你的系统调用入口

根据你用的内核位数(32/64bit) 选择需要修改的文件:

arch/mips/kernel/scall32-o32.S  ------> 32bit kernel
arch/mips/kernel/scall64-64.S    ------> 64bit kernel

64bit内核,如果支持兼容32 bit ABI (o32, n32 ) 则还需修改 scall64-o32.S 或 scall64-n32.S

以32bit 内核为例,在 arch/mips/kernel/scall32-o32.S  中找到宏定义

  .macro  syscalltable          /*
系统调用号从 4000 开始 */
    ......
    ......
    sys sys_timerfd        4
    sys sys_eventfd       1
    sys sys_fallocate       6   /* 4320 */
    sys sys_comcat        0         
/* 系统调用号为 4321 */
  .endm

最后加入自定义的系统调用 sys_comcat 于 sys_call_table 中, sys 为辅助宏,调用名后的数值 0 指示该系统调用所需的参数个数。

只能加在 sys_call_table 的最后,否则会扰乱标准的系统调用。


2. 实现系统调用

可以在 arch/mips/kernel/syscall.c 中给出一个实现,如:

asmlinkage void
sys_comcat(void)
{
    printk(KERN_EMERG "This's comcat syscall/n");
}


3. 修改 include/asm-mips/unistd.h

根据你的内核位和支持的ABI版本修改相应的宏定义,32bit 内核需修改:

#define __NR_Linux_syscalls     320    ---------> 321        (The number of linux syscalls)
#define __NR_O32_Linux_syscalls     320  ---------> 321  (The number of linux O32 syscalls)

相应的在其上的宏集的最后加入:
.......
#define __NR_timerfd            (__NR_Linux + 318)
#define __NR_eventfd            (__NR_Linux + 319)
#define __NR_fallocate          (__NR_Linux + 320)
#define __NR_comcat             (__NR_Linux + 321)



4. 测试新的系统调用sys_comcat

用重新编译后的内核启动,如下程序测试之:


.text
.globl  main
.ent    main

main:

    li  $2,
4321         /* sys_comcat 的系统的调用号 */
    syscall

.end    main



其中 MIPS 下系统调用的约定为:

v0:         用于置系统调用号
a0~a3:      置前四个参数,后面的参数用栈传
syscall      系统调用触发指令


编译 gcc cat.S -o cat

执行 ./cat


正确的话应有如下输出:

Message from syslogd@localhost at Wed Aug 29 13:15:37 2007 ...
localhost kernel: This's comcat syscall

mips linux 编译,Linux环境下mips-gcc编译 背景在之后的学习中,需要在自己的mips架构cpu上编写一系列工具。不想使用mips汇编代码编写这些工具,希望使用c语言编写,并编译为mips机器语言。所以这次编译没有编译c库(不能使用自带的头文件),仅仅编译了gcc编译器。搭建环境系统:Ubuntu 16.04 LTS版本前期准备在主目录~下进行编译。编译好的文件放在(安装在)~/gcc-mips文件夹下1、从镜像源上下载binutilssud... 阅读详情

相关推荐

在qemu中运行mips架构的debian linux

文章目录前言步骤配置网络 前言 在qemu中运行mips架构的debian linux可以用于在没有mips架构的硬件时做一些相关测试。 本实验环境: 本机:OSX 10.14.4 虚拟机:Ubuntu 16.04 debian linux: 32bit 大端序 步骤 如果不需要最新版本的qemu,可以直接通过apt-get安装 sudo apt-get install qemu-system-m...

搓雪小怪兽的工作室 2757

mips的系统调用

System Calls and I/O (SPIM Simulator)   系统调用 与 输入/输出(主要针对SPIM模拟器)  (本人使用的是Mars 4.4,也通用--!)   通过系统调用实现终端的输入输出,以及声明程序结束学会使用 syscall参数所使用的寄存器:$v0, $a0,  $a1返回值使用: $v0 下表给出了系统调用中对应功能,代码,参数机

wu_cai_的专栏 6922

mips处理器verilog代码实现AES功能

利用verilog代码编写的mips处理器,在指令和数据存储器中实现了AES算法加密和解码功能

MIPS汇编语言SYSCALL指令的用法

SYSCALL functions available in MARS Introduction A number of system services, mainly for input and output, are available for use by your MIPS program. They are described in the table below. M

csshuke的专栏 2万+

全志T113s3主线linux开发(0)--基础准备

嵌入式Linux设备的启动大概是三步:1)启动芯片+内存:常见的是Uboot,不过全志的Uboot主线对SPI NAND 不太友好,用TF卡就方便。对于T113S芯片,推荐使用Awboot,简陋但快速。开发阶段用这个就方便好多,对SPINAND支持也方便。2)启动linux内核:主线内核以下通篇都用6.13以上的内核。对比tina5.0还在用5.4 ,主要是性能、安全上有变化。6.0以上内核在devicetree的编写具体格式上有了变化,网上大量tina5.0和5.4内核的编写方式不适用。

2301_79234138的博客 2246

Ubuntu 26.04 本地安装 GitLab CE 完整教程(非 Docker 方式)

本文详细介绍了在Ubuntu 26.04系统上通过Omnibus包安装GitLab CE的完整流程。主要内容包括:环境准备(系统要求、依赖安装)、配置清华镜像源、执行安装命令、修改配置文件、服务管理命令以及常见问题解决方法。文章特别强调了内存要求(建议4GB以上)、首次登录密码获取、HTTPS安全配置等关键点,并提供了性能优化建议和安全设置指导。相比Docker方式,Omnibus安装具有性能更好、管理方便等优势,适合需要私有化部署GitLab的场景。

1369

MIPS初见

最近的MIPS感觉都是照猫画虎,写一篇做个笔记没准还能想明白点新东西,不知道咋用一定要经常打开指令集,这里MIPS指令集。 输入输出 重要的是这个syscall指令的用法,详见MIPS汇编语言syscall指令的用法。 因此在输入输出相应的类型时,要发出对应的指令,将常用的输入输出写在这备忘: 字符串 输出 .data str: .asciiz"Hello Wolrd" .text la $a0,str li $v0,4 syscall 参照上面的样例,我们就大致清楚了怎么对字符串进

zhousiyuan0515的博客 2688

单细胞分析(五)——使用Harmony进行数据整合和去批次

为了保证单细胞RNA测序数据的准确性和可靠性,需要对数据进行样本去批次处理。去批次的方法包括Harmony,SeuratV3等,这些方法可以有效地消除批次效应和技术噪声,并提高单细胞RNA测序数据的质量,为后续的数据分析提供更加可靠的基础。

阅读文献,记录学习笔记 3万+

MIPS系统调用与user API

MIPS系统调用与user API

pizicai105 4190

射频工程师必须了解的S参数四项要点

本文围绕单端 6 英寸走线的 S 参数展开深入分析,核心包含四项关键要点:低频下导线电学长度远小于信号波长,S11 呈大负分贝值、S21 接近 0 分贝;端口与走线的阻抗不匹配引发反射叠加,形成 S11 首个峰值(对应传输线四分之一波长频率);S21 相位可作为一致性检查依据,其 90° 相位差与 S11 峰值吻合;理想建模中 S11 峰值随频率上升因损耗下降,实际测量因连接器等阻抗不连续性,S11 会出现振荡上升。分析依托 Keysight ADS 工具与电磁求解器原理,为 S 参数解读提供科学支撑。

一只豌豆象的博客 1283

Imatest-Star模块(西门子星图)

星图分析指南:基于ISO12233标准的MTF测试方法,通过放射状射线和正弦灰度变化评估相机SFR性能。

weixin_64706696的博客 1565

linux 系统调用(1)

x86 系统调用及中断号 (附在最后) 用法: mov $number, %%eax int  0x80 系统调用也需要输入输出参数,例如 实际的值 用户态进程地址空间的变量的地址 甚至是包含指向用户态函数的指针的数据结构的地址 system_call是linux中所有系统调用的入口点,每个系统调用至少有一个参数,即由eax传递的系统调用号 一个应用程序调用f

CLP的博客 1776

如何点亮一颗sensor

要点亮一个sensor需要从,时钟、sensorI2C,供电,reset脚,mipi的配置几个方面一一确认。 reset脚拉高 给sensor的时钟有没有。(目前用到的常为24MHZ) 供电 查看sensor的数据手册,看有几个电源,用示波器量一下是否为手册规定的电压 比如:DVDD 数字电压: AVDD模拟电压 DOVDD芯片引脚出来的电压等为多少。 sensor的I2C能否抓到 将I2C的口对应上,用示波器量取i2c的波形。 检查有应答并且数据正确。读写地址是否正...

weixin_40787463的博客 3646

MIPS Linux 下添加系统调用,以Linux kernel 2.6.18为例.

 MIPS Linux 下添加系统调用,以Linux kernel 2.6.18为例添加一个系统调用有以下几个步骤:1.  在 kernel 的系统调用表 sys_call_table 中添加你的系统调用入口根据你用的内核位数(32/64bit) 选择需要修改的文件:arch/mips/kernel/scall32-o32.S  ------> 32bit kernel

Wenxy's computer science technology blog 5138

避开RK3588开发板SDIO配置的坑:O9201SB WiFi模组接入实战指南

本文为嵌入式开发者提供了在RK3588开发板上,利用TF卡槽接入O9201SB WiFi6模组的实战指南。文章深度剖析了SDIO配置中常见的电源管理序列冲突问题,并给出了从设备树节点修改、内核编译到系统验证的完整解决方案,帮助开发者避开配置陷阱,成功实现高性能无线连接。

sprite的博客 954

强化学习-动态规划

动态规划(dynamic programming)是程序设计算法中非常重要的内容,能够高效解决一些经典问题,例如背包问题和最短路径规划。动态规划的基本思想是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到目标问题的解。动态规划会保存已解决的子问题的答案,在求解目标问题的过程中,需要这些子问题答案时就可以直接利用,避免重复计算。本章介绍如何用动态规划的思想来求解在马尔可夫决策过程中的最优策略。

qq_45481856的博客 2113

MIPS Linux 下添加系统调用,以Linux kernel 2.6.18为例

<br />添加一个系统调用有以下几个步骤:<br />1.  在 kernel 的系统调用表 sys_call_table 中添加你的系统调用入口<br /><br />根据你用的内核位数(32/64bit) 选择需要修改的文件:<br />arch/mips/kernel/scall32-o32.S  ------> 32bit kernel<br />arch/mips/kernel/scall64-64.S   ------> 64bit kernel<br /><br />64bit内核,如果支持

嵌入式开发小站 1585

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

MIPS(loongson)linux 中添加系统调用

在基于MISP(loongson)架构处理器与基于 x86 架构处理器的 linux 内核中添加系统调用时更改的文件是不同的,x86 中需要更改 arch/x86/kernel/syscall_table_32.S arch/x86/include/asm/unistd_32.h 文件。而在 MIPS 中分两种情况,32bit 的内核中,需要更改 arch/mips/k...

weixin_30919919的博客 223

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

mips处理器linux内核添加系统调用

参考文件: arch/mips/kernel/scall32-o32.S sys_call_table定义了系统调用的函数列表。在这个表中反复引用sys这个汇编宏定义二元组。 .macro  sys function, nargs         PTR        /function         LONG        (/nargs         .endm 这个表

做一个有技术追求的人 2354

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

mips+linux内核启动,mips处理器linux内核添加系统调用

参考文件:arch/mips/kernel/scall32-o32.Ssys_call_table定义了系统调用的函数列表。在这个表中反复引用sys这个汇编宏定义二元组。.macrosys function, nargsPTR /functionLONG (/nargs << 2) - (5 << 2).endm这个表相当于一个二元组列表(或...

weixin_35422396的博客 437

如何给MIPS架构的kernel添加系统调用

首先在arch/mips模块里添加新系统调用getposition的实现:arch/mips/kernel/scall32-o32.S  sys sys_ni_syscall    0     sys sys_ni_syscall    0     sys sys_ni_syscall    0     sys sys_ioprio_set    3     sys sys

Yaoyao的笔记簿 1400

Linux MIPS64下hook系统调用(kylin server v10)

本文基于mips64平台,实际写个demo介绍如何在mips64下hook系统调用,这里只介绍基于syscall table的hook。

weixin_42915431的博客 3974

MIPS shellcode

文章目录1. MIPS linux 系统调用writeexecve2. 编码优化优化方法-指令优化编码优化3. 通用shellcodereboot shellcodereverse_tcp shellcode 1. MIPS linux 系统调用 MIPS没有int 0x80, 而是使用syscall进行系统调用。 syscall($v0, $a0, $a1, $a2...); 汇编: li $a0, 0 li $v0, 4001 # exit syscall $v0为系统调用号, 定义位于/usr/in

Starr 2640

系统调用和中断处理的异同(以Linux MIPS为例)

在Linux下写一个驱动时候遇到的读操作性能问题,让我想一窥系统调用的处理流程,以查出问题的root cause。很多书把它和中断处理放在一起讲,但是又没有哪本书说清楚了,看来只有代码才能说明一切。以Linux系统下MIPS体系结构为例。从开始说起。

tugouxp的专栏 587

pwntools 的 MIPS Shellcode 生成模块:pwnlib.shellcraft.mips 完全指南

本文以 pwntools 官方文档 [docs/source/shellcraft/mips.rst](https://link.gitcode.com/i/cc47aa5fab947cb854c8b91abceba564) 为主线,系统讲解 `pwnlib.shellcraft.mips` 及其 Linux 子模块 `pwnlib.shellcraft.mips.linux` 的架构、模板机制与

gitblog_00970的博客 897

mips 内存 linux,MIPS嵌入式linux 分析

一 linux的启动流程1.1、嵌入式linux 简介LINUX 是一个类似UNIX 的操作系统,其代码是完全重新开放的,内核功能强大,实现简洁。它提供了类似UNIX 的编程接口和系统调用,可以方便的将UNIX系统上的应用程序,移植到Linux上运行。Linux具有一下特点:1.可移植性:Linux内核源代码是用C语言编写的,可以运行到各种平台。2.支持多种处理器体系结构:Linux内核能够支持的...

weixin_29378273的博客 551
上一篇: 福珑迷你PC之主板结构
下一篇: 使用oprofile分析性能瓶颈
Jack Tan
博客等级 码龄22年 28粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值