General
链接器堆栈溢出错误
Q:工程里的源文件比较多,每个文件都能编译,但是链接时报错,提示链接器堆栈溢出等错误,怎么办? 在 IDE 设置中,启用短命令,如下图所示:
SylixOS 下的 curl 使用
Q:如何在 SylixOS 下使用 curl 进行文件传输(PS: 快速上手)? A:使用 curl 进行文件传输步骤如下: 1. 使用前的准备工作 ① base 勾选 openssl 组件进行编译,将生成的 libcrypto.so 和 libssl.so 二进制上传至 SylixOS /lib 下; ② clone curl 代码,将编译生成的 libcurl.so 与 curl 分别上传至 /lib 与 /bin 下; 此时 curl 在 SylixOS 下已处于可用状态,shell 输入 ...
SylixOS 支持宽字符和多国语言吗
Q: SylixOS 支持宽字符和多国语言吗 SylixOS 内核有限支持宽字符操作,但如果是 SylixOS,只需要连接 libcextern 库,则 SylixOS 提供全功能的多国语言支持; 可以选择的语言与编码位于 /usr/share/locale 目录下,用户可自行添加需要支持的语言与编码。
sylixos.h 中引出内核相关定义
Q: 为什么内核模块在文件中加入了 #define __SYLIXOS_KERNEL 还是没有从 SylixOS.h 中引出内核相关定义? #define __SYLIXOS_KERNEL 一定要放在引用 SylixOS.h 前, 有可能出现文件交叉引用,导致内核头文件先于 __SYLIXOS_KERNEL 引用, 所以建议内核模块将 #define __SYLIXOS_KERNEL 放在文件起始,后面再引用其他头文件。
wireshark抓包大小显示超过mss大小
Q:调试emac的时候抓包 ftp 数据,发现数据包的长度大于设置的 MTU 和 MSS 大小,这样不利于分析数据包的传输情况。 解决办法: step1:打开网络适配器的属性界面,点击【配置】 step2:关闭大量传递减负 v2(IPV4)这个选项 这样再使用wireshark抓包,抓到每个包的最大大小显示就正常了
应用程序报错:error function not implemented
Q:运行应用程序提示如图的错误,对应的库已上传,在自己的设备上可以正常。其他设备会报错 “error function not implemented” 上传的时候没有设置 ftp 的 bin 模式,可以通过将原来的 bin 文件读出来和上传之前的 bin 文件对比查看其差异
SylixOS 日志子系统实现示例
Q:SylixOS 日志子系统实现示例 (1)测试程序代码如下: #include <stdio.h> #include "system/loglib/loglib.h" int main (int argc, char **argv) { console_loglevel = default_message_loglevel; int __unused i; for (i = 1; i < 20; i++) { usleep (10000); ...
调用 close 关闭 tcp 链接之后发送 RST 不是 FIN 的问题
Q:在设置 linger 等于 0 之后, 调用 close 关闭 socket, tcp 协议会发送 RST, 并不走四次挥手的流程, 直接断开 tcp 两端的链接, 并且不进入TIME_WAIT 状态等待, 以降低资源的消耗(其实这种行为在网络条件较差的情况是存在一些弊端的, 降低了 tcp 协议的可靠性) . 而实际情况下, 当 socket 队列中有消息的时候才会发送 RST, linger 的设置并未如愿生效 用例代码片段( 代码段1 ) : connfd = ...
如何获取国产DSP6678(M78)编译链
Q:国产6678编译链如何使用?编译报错如何处理? 1.目前 6678 编译链只能在 3.11.0 以后版本的 IDE 中进行使用,获取 IDE 时注意版本号,国产 6678(M78)需要获取以下编译链插件: 2.安装完编译链插件后,即可编译国产 6678 Base 工程及 APP 工程。 如果遇到插件安装完成后,但无法编译 Base 的情况,则需要查看当前电脑的环境变量是否添加了 mc6x 编译链的路径:
SylixOS 文件系统格式化说明
Q:SylixOS 文件系统格式化说明 更多扩展知识见: 详见《RealEvo-IDE使用手册》第8章 安装SylixOS 第 8.4 节 硬盘安装SylixOS。 公开链接:SylixOS 手册获取
SylixOS Qt5 输入法支持
Q:SylixOS Qt5 是否支持中文输入? SylixOS Qt5 2.1.x 版本之后都支持了中文输入法以及软键盘,可以根据 Qt5 使用手册进配置使用,详情可见附件。 更多扩展知识见: 详见《RealEvo-Qt5SylixOS使用手册》第 4 章 第 4.5 节输入法支持 公开链接:SylixOS 手册获取
使用 USB WiFi 模块示例
问:能否提供 SylixOS 使用 USB WiFi 模块示例? 答:具体参见附件所附的知识库文档“TN0010010022_IGC1500使用USBWiFi模块工程笔记_V1.0.pdf”。
SylixOS上同时运行多个APP提示内存申请失败
问:SylixOS上同时运行多个APP提示内存申请失败,怎样解决? 答:在 SylixOS 中,所有动态加载的对象,如内核模块、动态链接库、应用程序所使用的内存都来自于虚拟内存空间。虚拟内存空间以页为单位进行管理,对象加载时,只会获得虚拟页面,只有在真正使用时,才会进行物理页面的分配。 系统每启动一个app会预先分配32M左右的虚拟内存,但是不进行映射,使用时才映射物理地址。 例如在FUXI-H2的bsp中,虚拟内存描述符如下: ...
飞腾FT2004 执行 reboot 命令会卡住
问:飞腾FT2004 执行reboot命令为什么会卡住? 在执行reboot命令时,会调用SMC 0x84000009 CPU RESET服务。然后UEFI执行到如下卡住: 可以看到,UEFI 跳到 0x88009ff0 地址执行了。这段内存是需要 reserved 的,避开了这段内存,确实是可以正常重启。
uboot 被意外修改的原因?
问:uboot被意外修改的原因? uboot被篡改原因挺多的,这里列出遇到过的情况。 情况一:通过IO映射空间读写 Flash。 这种情况根源在于IO映射空间是公开的,应用可以进行访问。例子 ft2000-4,这个控制器把Flash空间映射到地址空间的前 512MB,这部分空间是公开的,驱动要访问导致必须进行虚拟映射。如果在驱动写入 Flash 过程中,应用写入了这部分地址空间(因为存在调度),就会导致意外写入的内容同步到 Flash 上。 ...
SDIO 初始化致系统卡死原因
问:初始化 SDIO 导致系统卡死,为啥? 答:SDIO 驱动必须要有实际设备才能初始化,否则会卡死在复位命令的传输完成信号量等待上。SDMEM 驱动不存在这个问题,一般存储设备都是用的 SDMEM,只有 SDIO 接口的其他设备才需要 SDIO 驱动。
printk 在 telnet 终端输出打印信息
Q:printk 在 telnet 终端上输出打印信息 通过logfiles命令查看文件描述符是否添加成功。 更多扩展知识: 参考文章:telnet 输入输出重定向
telnet 输入输出重定向
一、起因 先说明一下我是因为什么问题才去了解这部分知识。ko 模块里注册了一个 shell 命令,对应的函数里创建了一个线程,线程里有一些打印。在串口上敲 shell 命令,线程打印都在串口上;但在 telnet 上敲 shell 命令,线程打印依旧在串口上。如果换做应用程序里创建线程加点打印,在串口上运行,打印都在串口上;在 telnet 上运行,打印都在 telnet 上。同样的代码一个是内核线程下创建的另一个是应用程序进行下创建的,现象怎么就会不一样了呢? 二、分析 ...
SylixOS 下对某些设备的 select 功能支持
Q:对于一些不具备阻塞功能的函数接口,如何才能使其达到阻塞的目的? 使用 select 可以对诸多输入设备进行阻塞。 如何实现特定设备的 select 功能? 实现步骤如下: ① 在设备控制块中加入等待链表头控制结构(每个具备 select 功能的设备都需要此控制结构); ② 初始化等待链表头控制结构; ③ 在驱动 ioctl 函数中添加命令字 “FIOSELECT” 和 “FIOUNSELECT”; ④ 在 “FIOSELECT” 下 ...
SylixOS 下如何测量中断服务耗时
功能概要 SylixOS 下可以测量中断服务耗时,分析各中断服务耗时对分析系统实时性和驱动故障等有很大帮助。 操作步骤 1、该功能通过中断中执行钩子函数来实现,会略微增加中断执行时间,所以默认是关闭的。需要使用时,编译前需修改base文件,主要修改为将 /libsylixos/SylixOS/config/ kernel/kernel_cfg.h 中 LW_CFG_INTER_MEASURE_HOOK_EN 宏使能(即置为1) ...
如何登录和退出 SylixOS
登录和退出 SylixOS? 1、连接方式 SylixOS 支持 Telnet 和 Console 方式登录 SylixOS 2、登录工具 Telnet 和 Console工具可以使用 Putty,XShell、SecureCRT等工具。 3、SylixOS 设备 SylixOS 设备可以是虚拟机设备,也可以是物理设备。 4、登录步骤 1)输入设备IP地址,开始连接,如设备正常连通,则会提示输入用户名和密码, 如无法连接,请使用 ping 命令检查设备网络。 ...
SylixOS 设备介绍
在SylixOS中,设备可划分为虚拟设备和物理设备。 虚拟设备有: /dev/zero、/dev/null、/dev/socket、/dev/netevent、/dev/urandom、/dev/random、/dev/shm/、 /dev/hotplug、/dev/semfd/、/dev/bmsg/、/dev/signalfd、/dev/timerfd、/dev/hstimerfd、/dev/pipe/ 等。 物理设备有: ...
Qt5 套件编译器配置异常
Q:Qt5 套件中无编译器且无法导入工程该如何解决? 如出现 Kits 中的 Qt Versions 界面显示红标及编译器界面无对应的 C/C++ 编译器: 当出现这两种状况及无法导入工程时,可以先关闭 Qt5 应用,再通过删除C盘 -> 用户 -> 主机名 -> AppData -> Roaming 目录下 的 QtProject 文件夹后重启 Qt5 应用即可。 原因分析: QtProject 文件夹中存储的是 Qt 的配置文件,Qt ...
汇编中使用串口打印调试方式
问:如何在汇编中使用串口打印调试方式 BSP 调试中经常会遇到汇编中需要打印相关状态的情况,如下代码基于全志 T3(ARM Cortex A7)平台展示如何在汇编中打印一个字符的串口调试信息。类似的方式经过简单修改也可以移植到其他平台上。(注意:打印串口信息过程中会使用到 R0、R1 两个寄存器,注意相关寄存器的上下文关系) LDR R1, =0x01c2807C ; /* 读取串口状态寄存器 */ 1: LDR R0, [R1] MOV R0, R0, LSR#2 ; /* ...
SylixOS 中动态装载与动态链接的区别及使用方法?
问:SylixOS 中动态装载与动态链接的区别及使用方法? 答: 1. 适用范围 本文档适用于对动态装载有了解学习需求以及对动态装载与动态链接两者区别及使用有了解需求的开发人员。 2. 原理概述 动态装载 (Dynamic loading) 意味着在加载或运行时将库(或任何其他二进制文件)加载到内存中。 动态加载可以类比于插件,也就是说,在动态加载发生之前,程序可以实际执行,在需要时,可以通过调用 “dlopen”、“dlsym”、“dlclose” ...
如何在 SylixOS 中获取地址
1、获取内核内存布局 BSP 的内存布局在链接脚本已经固化。可以参考 BSP 工程中对应链接文件,例如: 上图中可查出 TEXT 段和 DATA 段的基地址,分别为: TEXT 0x10000000; DATA 0x10600000; 2、获取内核模块基地址 1、使用 modules 命令(内核模块) BASE 列为内存起始, SIZE 列为模块占用的内存大小。 2、使用程序获取 以下函数可根据文件路径获取模块内存。 LW_API INT API_ModuleGetBase(pid_t pid, ...
SylixOS 开发禁(限)用有哪些注意事项
SylixOS开发禁(限)用说明 一、 SylixOS应用程序开发禁(限)用说明 1. 禁用内容 a) 禁用内容:禁止在函数内部定义大数组(或占用极大内存空间的局部变量) 禁用原因:易造成栈溢出破坏,且此种情况导致的异常难以排查 采取措施:可将需要的大数据使用动态分配或定义为全局变量 b) 禁用内容:禁止返回函数局部对象的地址 禁用原因:由于局部变量属于栈区,在函数返回后该对象空间已经无效 采取措施:只能返回动态分配对象的地址 c) ...
gethostbyname 函数如何获取自定义主机映射 IP 地址?
问:gethostbyname 函数如何获取自定义主机映射 IP 地址? 答:gethostbyname 函数可以通过主机名获取对应 IP 地址,因此我们可以在 /etc/hosts 文件中添加 自己定义的主机名以及对应的 IP 地址。 注:自定义主机名不要设置为 sylix 、 sylixos 等默认名称,这些默认名称都对应了 IP 127.0.0.1 ,因 此返回值不会是自己定义的IP地址。 以下为函数测试代码: #include <stdio.h> #include <netdb.h> ...
libamp_virnetdrv 虚拟网卡在 T3 AMP 上的移植案例
libamp_virnetdrv 可以方便的移植到各种平台,为 AMP 架构提供简单、高效的核间通信机制。下面以 T3 AMP(SylixOS + SylixOS)为例介绍具体的移植过程。 1、驱动支持 虚拟网卡包含 libamp_virnetdrv与 libamp_virnetdrv_config 两个部分。T3 是 ARM 平台,因此首先拷贝 libamp_virnetdrv\src\demo\arm_aarch64 下的四个文件到 T3 每个系统的 BSP 目录 ...
使用 C++11 的时候, -std=c++11参数后无法调用 M_PI 等宏定义。
Q:在使用 C++11 的时候, -std=c++11 参数后无法调用 M_PI 等宏定义。 该问题不是 bug, 是由于M_PI 等宏定义是 GNU 扩展中的,如果要使用 GNU 扩展中的宏定义,请添加 -std=gnu++11 -std=c++11,支持 C++11 标准; -std=gnu++11,支持 C++11 标准和 GNU 扩展特性; 扩展内容: SylixOS 内核提供基础的 C++ 运行时支持,他不仅支持将 C++ 程序与 SylixOS 镜像一起运行, 也支持将 C++ ...
nbench 测试的各项功能都代表什么?
问:nbench 测试的各项功能都代表什么? 答:nbench 的结果主要分为 ① 、 ② 两部分。 ① 部分分别对应为: NUMERIC SORT ## 数字排序——对长整数数组进行排序 STRING SORT ## 字符串排序——对任意长度的字符串数组进行排序。 BITFIELD ## 执行各种位操作函数。 FP EMULATION ...
SylixOS 中 “ts” 查看线程打印信息都是什么含义?
问:SylixOS 中 “ts” 查看线程打印信息都是什么含义? 答:对照下图中的 “ts” 命令线程打印信息含义为:线程名、ID 号、所属进程 ID、优先级、状态、线程锁、线程安全模式标志、等待计数器、缺页中断
SylixOS 中查看线程此时所处的状态通过什么命令、状态是什么含义?
问:SylixOS 中查看线程此时所处的状态通过什么命令、状态是什么含义? 答:SylixOS 中查看线程此时所处的状态可通过 Shell 命令 ts 查看“STAT”列,如下,线程“t_test”处于“SLP”状态。 查看SylixOS中该部分代码描述: 根据代码中获取tcb后信息的判断可知 “ts” 命令中 “STAT” 打印字符串表示的信息总结为:
SylixOS 中的时钟节拍是怎么处理的?
问:SylixOS 中的时钟节拍是怎么处理的? 答:系统提供了以下两个操作宏用于时钟节拍的转换: LW_MSECOND_TO_TICK_0 将毫秒转换为时钟节拍数,不足一个时钟节拍的毫秒值被丢弃, LW_MSECOND_TO_TICK_1 则将不足一个时钟节拍的毫秒值当作一个时钟节拍处理。
SylixOS 系统调用原理和调用过程在哪里查看?还分用户态和内核态么?
问:SylixOS 系统调用原理和调用过程在哪里查看?还分用户态和内核态么? 答:标准版 SylixOS 不支持系统调用, 直接通过函数的方式直接访问的。系统调用是会影响系统实时性的,尤其切换页表,很耗时间。 SylixOS 不区分用户态和内核态,内核安全问题我们有容器的解决方案,容器是涉及到系统调用的!
1ms 定时器如何进行调度执行的呢?
1ms 定时器可以创建多个吗?如果可以的话,多个 1ms 的中断函数是如何进行调度执行的呢? 1、非 rms 调度的定时器可以创建多个 2、多个定时器是通过查分时间链的方式进行调度的。 若同一时间多个 timer 同时到期的情况,那就是通过链式方式进行调度,按注册顺序。 前一个 timer 的中断函数未执行完,不会执行下一个 timer 的中断函数,这是个回调处理。 如果一个 1ms 的定时器函数在 1ms 内执行不完,后面的会被延迟。
SylixOS 中断,若只收到一个字节,是什么行为?
Q:SylixOS 中断,如果只收到一个字节,是什么行为? 以目前为例:触发级别是3,FIFO长度是16 ,14个字节触发一次中断 如果只收到一个字节,有个超时周期后也会触发中断 虽然没有FIFO满 。这个超时时间是硬件给的并不是软件配置的 ;可以问一下龙芯 一般都是按波特率的几个时间周期 ,手册上应该是4个周期 。 参考文章:SylixOS 系统的中断优先级与线程优先级是相互独立的吗? 参考文章:接收器 FIFO 触发电平
SylixOS 串口中断
问:SylixOS 的串口在收到几个字节后就能给出中断?如,串口收到一个字符,这个时候会立即给出中断吗还是像龙芯手册中写的,得等4个空闲周期后再给出中断? 答:这个和处理器及中断控制器相关, 默认1字节就会触发中断; 这个要看CPU的串口是怎么处理的, 龙芯芯片手册说的要等空闲周期那就是要等空闲时间 。
SylixOS 启动后显示环境变量从 profile 读取失败?
问:SylixOS 启动后显示环境变量从 profile 读取失败? 答:SylixOS 启动时会执行 varload 命令,该命令的作用是从系统 /etc/profile 文件中读取环境变量配置信息,加载到系统运行环境中, 如果系统 /etc 路径下没有 profile 文件,系统启动则会有如:图 1-1所示提示信息。 图 1-1 加载profile失败 如果没有 ...
鼠标、键盘不可用问题解决?
Q:部署 qt 环境到设备,发现鼠标、键盘没反应? 1、查看 xinput.ko、xsiipc.ko 这两个模块是否加载,这两个模块在部署 Qt 的时会同 startup.sh 等脚本一同部署至目标机,并会写入到startup.sh 脚本自动加载; 当注册该模块后,将创建两个设备,分别为 /dev/input/xmse 和 /dev/input/xkbd,分别收集系统中所有的鼠标和键盘事件,应用程序则只需要读取这两个设备即可。 可以通过 lsmod 查看 xinput.ko(input ...
Next page