我们可以通过ulimit -a 用来显示当前的各种资源限制。

rk3399_all:/ # ulimit -a
time(cpu-seconds)    unlimited
file(blocks)         unlimited
coredump(blocks)     unlimited
data(KiB)            unlimited
stack(KiB)           8192
lockedmem(KiB)       64
nofiles(descriptors) 1024
processes            15426
sigpending           15426
msgqueue(bytes)      819200
maxnice              40
maxrtprio            0
resident-set(KiB)    unlimited
address-space(KiB)   unlimited

在Linux系统中,每个进程可以使用的FD数量是有上限的,在Android中这个上限为1024,表示每个进程可以创建的file descriptors 不能超多1024个。当系统某一文件的打开句柄数超过1024时,就会报错:

"Too many open files"

那么,这个值到底是哪里定义的呢?

这边根据descriptors的属性,判断应该在kernel的某个头文件中,终于在:linux/posix_types.h 找到:

/** This allows for 1024 file descriptors: if NR_OPEN is ever grown* beyond that you'll have to change this too. But 1024 fd's seem to be* enough even for such "real" unices like OSF/1, so hopefully this is* one limit that doesn't have to be changed [again].** Note that POSIX wants the FD_CLEAR(fd,fdsetp) defines to be in* <sys/time.h> (and thus <linux/time.h>) - but this is a more logical* place for them. Solved by having dummy defines in <sys/time.h>.*//** This macro may have been defined in <gnu/types.h>. But we always* use the one here.*/
#undef __FD_SETSIZE
#define __FD_SETSIZE    1024

这么说来,是否我们直接在kernel中修改这个定义,就能生效。

兴冲冲的修改了这个1024的值,编译固件测试发现:Too yong too simple.

搜索研究一通,发现在bionic/libc/kernel$ vim README.TXT 有如下一段话:

Bionic comes with a processed set of all of the uapi Linux kernel headers that
can safely be included by userland applications and libraries.These clean headers are automatically generated by several scripts located
in the 'bionic/kernel/tools' directory. The tools process the original
unmodified kernel headers in order to get rid of many annoying
declarations and constructs that usually result in compilation failure.

好吧,原来还要再经过一系列的获取,然后通过bionic/libc/kernel/tools 里面的脚本来生成。

这边验证修改:

external/kernel-headers/original/uapi$ vim linux/posix_types.h +22

#define __FD_SETSIZE    1036

然后执行工具里:

./update_all.py

再来看看:

cc@ubuntu:~/7.1/external/kernel-headers/original/uapi$ gd .
diff --git a/original/uapi/linux/posix_types.h b/original/uapi/linux/posix_types.h
index 988f76e..44a2fc8 100644
--- a/original/uapi/linux/posix_types.h
+++ b/original/uapi/linux/posix_types.h
@@ -19,7 +19,7 @@* use the one here.*/#undef __FD_SETSIZE
-#define __FD_SETSIZE   1024
+#define __FD_SETSIZE   1036

这边文件的修改是生效了。

但是,最终生成的固件,编译还是1024,也就是说,上面的修改,还是没有效果。通过了解,确认 __FD_SETSIZE 这个是用于 select 相关调用传参用的。所以修改无效。

那么,究竟在哪里可以达到修改RLIMIT_NOFILE的值呢?

通过init.rc中,我们可以发现setrlimit 语句。试试:

setrlimit nofile 1048 1048

还是无效,看看其它类似的的配置,是三个数值,那么nofile的数值是多少?

查找相关定义可以发现:

vim bionic/libc/kernel/uapi/asm-generic/resource.h

#ifndef RLIMIT_NOFILE
#define RLIMIT_NOFILE 7
#endif
"bioni

这样子,那在init.rc 中 加句:

setrlimit 7 1048 1048

打包生成个固件,ulimit -a 确认,生效了,真不容易。

Android 系统文件限制小探相关推荐

  1. TechCrunch Disrupt SF 来啦!快和小探看看本届都有哪些亮点?

    硅谷Live / 实地探访 / 热点探秘 / 深度探讨 还记得美剧<硅谷>里Richard他们的创新公司是怎么拿到第一笔资金的吗?没错,人家是靠TechCrunch Disrupt 的&q ...

  2. 最强 Android Studio 使用小技巧和快捷键

    写在前面 本文翻译自 Android Studio Tips by Philippe Breault,一共收集了62个 Android Studio 使用小技巧和快捷键. 根据这些小技巧的使用场景,本 ...

  3. Android 仿微信小视频录制

    Android 仿微信小视频录制 WechatShortVideo和WechatShortVideo文章

  4. 【Android 逆向】Android 系统文件分析 ( /system/ 系统命令和系统应用数据目录 | /system/app/ 系统应用目录 | sys Linux 系统内核文件目录 )

    文章目录 一.system 系统命令和系统应用数据目录 1./system/app/ 系统应用目录 2./system/framework/ 框架目录 3./system/font/ 字体目录 二.s ...

  5. Android 之窗口小部件高级篇--App Widget 之 RemoteViews - 跨到对岸去

    在之前的一篇博文( Android 之窗口小部件详解--App Widge t)中,已经介绍了App Widget的基本用法和简单实例.这篇主要讲解 App Widget 的高级内容,即通过 Remo ...

  6. android小闹钟程序,Android实现闹钟小程序.pdf

    Android实实现现闹闹钟钟小小程程序序 这篇文章主要为大家详细介绍了Android实现闹钟小程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 最近写了 闹钟的程序,看到SharedPrefe ...

  7. TFTP更新linux或android系统文件

    这里记录使用TFTP更新linux和android系统文件的方法(以zImage为例,适合大多数的开发板或者产品,本测试是基于RealARM210的开发板): 首先进入u-boot命令行界面,在操作前 ...

  8. Android Studio使用小技巧:提取方法代码片段

    今天,讲讲android studio使用的小技巧.把代码直接提取一个函数. 有些时候我们在一个方法内部写了过多的代码,然后想要把一些代码提取出来再放在一个单独的方法里,通常我们的做法是复制粘贴,现在 ...

  9. Android扩展类方法,Android 扩展 uni小程序SDK 原生能力

    Android 扩展 uni小程序SDK 原生能力 概述 本文档主要介绍如何扩展 uni小程序SDK 原生能力. 什么是扩展原生能力? 扩展原生能力指的是将您原生开发的功能通过一定规范暴露给 uni小 ...

最新文章

  1. 今晚8点直播 | 详解聊天机器人落地及进阶实战
  2. 从绩点 1.8 逆袭的复旦博士,华为天才少年!
  3. 命令行参数tail c语言,osg学习笔记2, 命令行参数解析器ArgumentParser
  4. 动态路由器与静态路由器的理论知识
  5. 【Netty】Netty 核心组件 ( Future | Channel | Selector | ChannelHandler )
  6. Python入门100题 | 第060题
  7. gpg加密命令 linux_加密方案 GNUPG amp; Yubikey
  8. CV之NS之VGG16:基于TF Slim(VGG16)利用七个不同的预训练模型实现快速NS风格
  9. 计算机格式化后数据恢复的基础,电脑硬盘格式化后还能恢复吗
  10. python课设答辩问题及答案_HTML5网站前端开发设计答辩问题及答案
  11. linux的增删改查、压缩与解压缩
  12. vb6 英文和中文长度不同_PPT里中文排版就是没英文好看?你怕是假酒喝多了…...
  13. SQL 语句,聚沙成塔
  14. TaoFramework
  15. 推荐的四款产品原型设计工具
  16. phpnow测试PHP源码,phpnow php探针环境检测代码
  17. 数据中心解决方案之灾备方案设计(上)
  18. Microsoft Visio 2010 - 编辑属性值
  19. 【zt】克服当众怕羞的心理1
  20. 几个python运维脚本

热门文章

  1. 如何用计算机控制电灯,教你用智能手机遥控电灯
  2. 终于有人把鸿蒙OS讲明白了!并开放鸿蒙教程!
  3. 如何翻译word文件中的英文
  4. 019_Lead介绍Convert 按钮重写
  5. 电脑视频文件太大怎么压缩?电脑压缩视频大小
  6. linux 文本文件切分
  7. windows查看端口号,查看端口号占用情况,杀掉端口
  8. vivooriginos和鸿蒙对比,凸显浓厚节日氛围 vivo OriginOS新春版上线
  9. 回归树算法原理及实现
  10. php怎么运行网页_「Dev」 - PHP运行环境