SylixOS 开发禁(限)用有哪些注意事项
SylixOS 开发禁(限)用有哪些注意事项
SylixOS开发禁(限)用说明
一、 SylixOS应用程序开发禁(限)用说明
1. 禁用内容
a) 禁用内容:禁止在函数内部定义大数组(或占用极大内存空间的局部变量)
禁用原因:易造成栈溢出破坏,且此种情况导致的异常难以排查
采取措施:可将需要的大数据使用动态分配或定义为全局变量
b) 禁用内容:禁止返回函数局部对象的地址
禁用原因:由于局部变量属于栈区,在函数返回后该对象空间已经无效
采取措施:只能返回动态分配对象的地址
c) 禁用内容:在多线程编程中,禁止将线程局部对象的地址传递给其他线程使用
禁用原因:存在极大安全隐患,且难以排查此类问题
采取措施:采用全局变量,或动态分配的方式实现信息共享交互
d) 禁用内容:在多线程编程中,禁止对共享对象(全局变量,动态分配对象)进行非
互斥访问
禁用原因:存在极大安全隐患,且难以排查此类问题
采取措施:共享对象之间需要用锁进行读写保护,保证完整性
e) 禁用内容:每个软件模块发布时,禁止携带任何编译警告,如有,必须作特别说明
禁用原因:慎重处理每一个编译警告,可能存在未知潜在风险
采取措施: 无
2. 限用内容
a) 限用内容:函数的实现中,尽量不要依赖全局变量(或函数内部定义的静态变量)
限用原因:此类函数不可重入,存在状态依赖,容易造成逻辑错误
采取措施:可将依赖的相关全局变量(状态依赖相关)以函数参数的方式,由调用
者管理
b) 限用内容:在C库中,限制使用不安全的API,如:sprintf,get,strcpys等
限用原因:存在缓冲区溢出的风险。
采取措施:应该用替代的安全函数:snprintf,,fgets,strncpy等参数里面携带缓冲区大小的函数
c) 限用内容:在系统整体测试的时候,避免将RealEvo-IDE工具接入测试系统
限用原因:避免造成误操作(如认为启动APP调试)造成系统测试异常,且问题难以排查
采取措施:关闭IDE程序,或隔离测试环境
二、 SylixOS驱动程序开发禁(限)用说明
注:应用程序开发禁(限)用部分,同样适用于驱动开发。
1. 禁用内容
a) 禁用内容:禁止在中断服务中调用导致系统挂起的API(如信号量的pend函数类,
sleep函数类等)
禁用原因:导致系统死机
采取措施:无
b) 禁用内容:禁止在中断服务中调用导致系统挂起的API(如标准 open,read 等,如
printf,如malloc\free等。这些API间接调用信号量pend等接口)
禁用原因:导致系统死机
采取措施:可采用printk代替printf
c) 禁用内容:禁止在自旋锁加锁与解锁间的代码中使用以上两个禁用项中提到的引起
系统挂起的 API
禁用原因:导致系统调度异常
采取措施:无
d) 禁用内容:禁止驱动中,直接将应用程序传递的内存指针用于驱动DMA传输
禁用原因:应用层的内存属于虚拟内存,且带有cache属性,造成DMA传输异常
采取措施:驱动中涉及DMA传输的内存,应该使用API_VmmDmaMalloc系列函数分配,再通过内存拷贝形式与应用内存进行同步
e) 禁用内容:禁止驱动和应用程序混用打开的文件描述符,如:
1) 驱动里面打开了文件,应用程序通过驱动提供的接口访问这个文件
2) 应用程序将打开的文件描述符通过驱动提供的函数传递给驱动访问文件
禁用原因:应用态和驱动(内核态)在管理文件描述符时是相互独立的,以上用法
会造成错误甚至未知异常
采取措施:无
f) 禁用内容:禁止在中断服务程序中使用浮点
禁用原因:为了保证实时性,系统在中断服务中不会保存浮点寄存器上下文,这可能影响正常使用浮点的应用程序
采取措施:无
2. 限用内容
a) 限用内容:中断服务应尽可能保持短小精悍,保留最关键代码即可
限用原因:造成中断延迟过长,影响系统实时性
采取措施:可将大量处理放入线程中处理
b) 限用内容:尽量避免在内核驱动中使用浮点运算
限用原因:为安全起见,内核中不使用硬浮点。因此,软浮点实现会影响系统性能
采取措施:放到应用层使用浮点,或者采用整型数据
c) 限用内容:在结构体中使用位域要谨慎使用
限用原因:位变量的存储空间受限,有长度溢出的风险
采取措施:结构体中谨慎使用位域,或不使用
Related Articles
SylixOS 应用程序开发
SylixOS 应用程序开发 详见:RealEvo-IDE (SylixOS IDE)安装目录如:F:\ACOINFO\RealEvo\doc 中 doc 文件夹下的 《SylixOS应用开发手册》 公开链接:SylixOS 手册获取
关于以太网巨帧收发问题的注意事项
问:关于以太网巨帧收发问题的注意事项: 答: 1. 通常情况下我们的网卡驱动是标准802.3结构,大家默认MTU都是1500 2. 目前客户在某些平台(如T3)使用AF_PACKET进行收发,以太网帧大于1514则失败 3. 需要修改的地方: 1). af_packt_eth.c : __packetEthDgramSendto(), __packetEthRawSendto() 取消大小限制的代码(后续内核会修正此问题) 2). ...
SylixOS 设备驱动程序开发
SylixOS 设备驱动程序开发 详见:RealEvo-IDE (SylixOS IDE)安装目录如:F:\ACOINFO\RealEvo\doc 中 doc 文件夹下的 《SylixOS设备驱动程序开发》 公开链接:SylixOS 手册获取
添加FTP权限功能
Q:添加FTP权限功能 有些客户对 ftp 有权限的需求,比如,只限定某些目录可见,标准的 BASE 的 FTPD 并不具备这个能力,但是可以通过小修改 BASE 的FTPD,并配合添加用户 、改 root 密码 来达到这个目的。 1. 添加一个 FTP 组 gadd ftp 500 注意:组 ID 不能与现有组重复 2. 添加一个FTP 用户 uadd ftp 123456 1 100 500 ftp_comment /home/ftp 注意:用户 ID ...
RealEvo-IDE 的 tpsfs explorer 工具使用注意事项
RealEvo-IDE 中的 tpsfs explorer 工具使用注意事项有哪些? 1.首先,想要使用 tpsfs explorer 访问存储设备的 tpsfs文件系统,首先电脑端需要识别该设备。例如:U 盘、SD 卡、或者硬盘转 USB 口等可以被电脑端识别的设备。 2.这样在电脑端识别后的 tpsfs 文件系统类型的存储设备,在打开 RealEvo-IDE 中的工具 tpsfs explorer 后即可识别设备信息。 3.最后即可对该设备的 tpsfs 文件系统中的内容进行读写拷贝。 ...