【问题标题】:insmod helloworld in init.rc before filesystems have mounted on Android在文件系统挂载到 Android 之前 init.rc 中的 insmod helloworld
【发布时间】:2014-07-04 15:10:57
【问题描述】:

我正在尝试修改已植根的 Nexus 7 设备上的 init.rc 文件。 我想在我的 /userdata/ 分区挂载之前插入一个简单的 hello world 模块。 我尝试过的事情:

  1. 从设备中提取 boot.img,提取 ramdisk,对 init.rc 进行更改(不起作用),重新创建 boot.img(使用 mkbootimg 工具),然后将其刷新到设备上再次

  2. 我已经将我为内核编译的 hello.ko 放在了 2 个地方:一个是 init.rc 所在的当前目录,这样我就可以执行类似 insmod hello.ko 的操作,它会找到它.其次,我创建了 /lib/modules/ 目录并将其放在里面

  3. 在我的 init.rc 中,我在 on_boot 之后放置了 insmod /lib/modules/hello.ko。 我还更改了 init.flo.rc 并将 insmod 放在挂载文件系统的 ./mount_all 之前和之后。 但是,我根本看不到我的模块加载。 权限集是 0644(我也试过 0777)

  4. 我在 /etc/folder 中创建了 init.d 并放置了一个 loadmodule.sh,它执行 insmod /lib/modules/hello.ko 并且该模块在启动过程完成后加载。

理想情况下,我希望在挂载 /userdata/ 分区之前立即执行此操作。

有人可以帮我解决这个问题吗?

我的设备是 Nexus 7,安装了 flo_kernel 和 root、busybox 等。

【问题讨论】:

    标签: android init nexus-7 init.d insmod


    【解决方案1】:

    Android 设备上的根文件系统是“只读的”,因此您不能将任何文件挂在根树上并期望它保留。这与您需要提取 ramdisk 并重新打包其内容以保持 init.rc 更改的原因相同;您还想在/ 找到的任何文件也必须打包到 ramdisk 中。 Android 在每次启动时从 ramdisk 中提取 root。

    该文件的更常规位置是系统分区,例如/system/lib

    【讨论】:

    • 好的。我已经在 init.rc 中进行了更改,并尝试从 /system/lib 目录中安装 hello.ko。问题是我看到模块加载,但是在文件系统安装之后。即使 insmod 位于 mount_all 上方的行。但我会继续努力:-)。其次,假设我对 recovery.img 做了类似的事情,即我修改了 init.rc 脚本,重新打包并刷新恢复,重新启动我的系统,我看不到我的模块在我的恢复日志中加载(甚至没有 mkdir 通过) .我错过了什么吗?我是否需要修改 /sbin/recovery/ 如果是,有没有办法这样做?谢谢
    猜你喜欢
    • 2012-05-04
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 2012-09-09
    • 1970-01-01
    • 2018-12-01
    相关资源
    最近更新 更多