由於arm系統中沒有bios裝置, 所以要使用apm(advanced power management),只能為arm系統建立乙個虛擬的字元裝置來模擬apm與使用者空間進行通訊. 這就是drivers/char/apm-emulation.c檔案。
drivers/char/apm-emulation.c:
此檔案實現了乙個misc裝置apm_bios,實質上也是乙個字元裝置, 主裝置號是10, 次裝置號是134。這個apm_bios裝置通過ioctl系統呼叫和使用者空間進行通訊。當使用者程序通過ioctl發來apm_ioc_suspend命令時,它就會呼叫apm_suspend函式,從而將系統轉入suspend狀態。
apm_suspend函式最終會呼叫"pm_suspend(pm_suspend_mem);"語句。
kernel/power/main.c:
pm_suspend函式在kernel/power/main.c檔案中定義,它會呼叫enter_state函式。
enter_state函式分為3個階段:
1. prepare階段:
呼叫suspend_prepare函式,suspend_prepare將呼叫體系結構相關的函式pm_ops->prepare。
2. 進入suspend階段:
呼叫suspend_enter函式,suspend_enter將呼叫體系結構相關的函式pm_ops->enter。
3. finish階段:
呼叫suspend_finish函式,suspend_enter將呼叫體系結構相關的函式pm_ops->finish。
pm_ops->prepare,pm_ops->enter,pm_ops->finish三個函式都是pm_ops的成員,pm_ops在arch/arm/plat-s3c2410/pm.c中定義,並在體系結構初始化的時候被註冊。
arch/arm/plat-s3c2410/pm.c:
s3c2410_pm_ops定義如下:
static struct pm_ops s3c2410_pm_ops = ;
模組初始化函式s3c2410_pm_init呼叫"suspend_set_ops(&s3c2410_pm_ops);"語句註冊s3c2410_pm_ops。
核心就是s3c2410_pm_enter, 它真正實現suspend/resume的狀態轉換。
Linux 2 6 21 支援Ipv6的裁剪
1.linux核心 linux 2.6.21,可從 2.針對arm 的linux2.6.21 裁剪補丁,2.6.21 at91.patch.gz 3.交叉編譯器 本文採用arm linux gcc3.4.1版本,busybox 1.9.2 由於arm linux gcc 3.4.1 預設的安裝路徑是...
arm學習之linux核心移植分析
linux核心可從 kernel.org 上獲得,其中偶數版本為穩定版本。linux核心 結構 kernel 核心管理的核心 系統相關 在arch kernel中 arch 體系結構相關 每個目錄 乙個體繫結構 include linux 標頭檔案 include asm 體系結構相關標頭檔案 in...
嵌入式Linux之ARM彙編基礎
對於 cortex a 晶元來講,大部分晶元在上電以後c 語言環境還沒準備好,所以第一行程式肯定是彙編的,至於要寫多少匯程式設計序,那就看你能在哪一步把 c 語言環境準備好。所謂的 c語言環境就是保證 c 語言能夠正常執行。c 語言中的函式呼叫涉及到出棧入棧,出棧入棧就要對堆疊進行操作,所謂的堆疊其...