Shutdown (embedded) linux from kernel-space

不问归期 提交于 2019-12-19 02:55:11

问题


I'm working on a modified version of the 2.6.35 kernel for Olinuxino, an ARM9 based platform. I'm trying to modify the power management driver (the architecture specific part).

The processor is a Freescale i.MX23. This processor has a "special" pin, called PSWITCH, that triggers an interrupt that is handled by the power management driver. If the switch is pressed,the system goes to standby. This is done in the driver by calling pm_suspend(PM_SUSPEND_STANDBY).

Given my hardware setup, I'd like to, instead, shutdown the system. So my question is:

What is the preferred way for a kernel-space process to trigger a clean system halt/poweroff?

I suppose there's a nice little function call out there, but I couldn't find it so far.

My kernel code (the file I'm working on is arch/arm/mach-mx23/pm.c) can be found here: github.com/spairal/linux-for-lobster, though my question calls for a general Linux kernel approach.


回答1:


The most general way would be for your driver to invoke shutdown as a userspace helper:

static const char * const shutdown_argv[] = 
    { "/sbin/shutdown", "-h", "-P", "now", NULL };

call_usermodehelper(shutdown_argv[0], shutdown_argv, NULL, UMH_NO_WAIT);

(Presuming you have a /sbin/shutdown binary installed). This will shut userspace down cleanly, unmount filesystems and then request the kernel shutdown and power off.

However, you may be able to do better than this - for example if you can guarantee that there's no disk filesystems mounted read/write, you could tell a kernel thread to invoke the kernel_power_off() function (it shouldn't be done from interrupt context).



来源:https://stackoverflow.com/questions/18296686/shutdown-embedded-linux-from-kernel-space

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!