在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

電子發燒友App

硬聲App

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
電子發燒友網>電子資料下載>嵌入式開發>Linux關機重啟流程解析

Linux關機重啟流程解析

2017-11-07 | rar | 0.2 MB | 次下載 | 1積分

資料介紹

Linux 下的關機和重啟流程對于一般的桌面應用和網絡服務器來說并不重要,但是在用戶自己定義的嵌入式系統內核中就有一定的研究意義,通過了解 Linux 關機重啟的流程,我們對它可以修改和自定義,甚至以此為基礎開發出全新的功能來。
  1. 概述
  在 Linux 下的關機和重啟可能由兩種行為引發,一是通過用戶編程,一是系統自己產生的消息。用戶和系統進行交互的方式也有兩個,一個是系統調用:sys_reboot,另一個就是 apm 或則 acpi 的設備文件,通過對其操作也可以使系統關機或者重啟。
  2. 通過系統調用 sys_reboot 的重啟
  這個系統調用定義了一系列的 MAGIC_NUMBER,在調用的開始部分首先檢查 MAGIC_NUMBER 是否正確,只有正確才繼續向下運行。在重啟的時候轉向分支
  case Linux _REBOOT_CMD_RESTART:
  首先使用 notifier_call_chain 向其它部分發出重啟的消息,然后調用 machine_restart 函數完成重啟。
  machine_restart 函數的開始部分有一段SMP相關的代碼,主要完成多 CPU 時由一個 CPU 完成重啟操作,其它 CPU 處于等待狀態。之后系統根據一個變量 reboot_thru_bios 的內容判斷重啟方式,通過閱讀 reboot_setup 我們可以得知,這個參數的內容是在系統啟動時指定的,決定了是否利用 bios,事實上是系統復位后的入口 (FFFF:0000) 地址的程序進行重啟。在不通過 bios 進行重啟的情況下,系統首先設定了重啟標志,然后向端口 0xfe 寫入數字 0x64,這種重啟的具體原理我還不大清楚,似乎是模擬了一次 reset 鍵的按下,希望大家和我討論。在通過 bios 重啟的情況下,系統同樣先設定了重啟模式,然后切換到了實模式,通過一條 ljmp $0xffff,$0x0 完成了重啟。
  3. 通過系統調用 sys_reboot 進行關機
  在系統調用的處理分支上,我們可以看到,首先同樣是檢查 MAGIC_NUMBER,然后在
  case Linux _REBOOT_CMD_POWER_OFF:
  的執行流程里面,又是使用 notifier_call_chain 發出了關閉計算機電源的消息,緊接著執行了 machine_power_off 函數。我們在 machine_power_off 函數中可以看到,如果 pm_power_off 這個函數指針不為空,那么系統就會通過調用這個函數進行關機。在 apm 已經加載的情況下 (SMP 除外),實際上 pm_power_off 函數實際上指向了 apm.c 中的 apm_power_off,在這個函數里系統通過 apm_info 結構里的值,使用切換到實模式關機,或者使用 apm_bios_call_simple 函數調用保護模式下的 apm 接口關機兩種方法。
  4. apm 驅動本身的關機過程
  apm 使用其注冊的設備的 ioctl 接口完成 apm 的操作,在 apm.c的do_ioctl 函數中可以看見處理的分支。這里只有 suspend 和 standby 的代碼,所以我們不能通過 ioctl 這種方法使用 apm 關機。
  當用戶按下 POWER 開關的時候,如果有 apm 模塊,那么關機流程是由 apm 來處理的。apm 驅動在初始化的時候啟動了一個 apm 內核線程:apm_mainloop,系統會在這里檢測到 POWEROFF 按鍵消息并且將其命名為 APM_SYS_SUSPEND,以區別 apm -s 設置的 APM_USER_SUSPEND 模式。緊接著進入了 apm_event_handler 函數,又從 apm_event_handler 函數進入了 check_events 函數,處理函數對應的 case 分支上。系統同樣使用了 suspend 函數進行關機,不過由于其它參數的原因,suspend 最后調用的是關機的流程。
  5. 解決問題實例
  1) 按 POWER 鍵時某些主板死機
  經查只有某些特定的驅動裝載之后才會出現這樣的情況,并且當使用關機系統調用 sys_reboot 的時候沒有這樣的問題。分析 apm 的處理流程,懷疑是在關機前驅動程序沒有正確處理 apm 發出的詢問消息造成的。由于部分驅動程序沒有源代碼,決定 hack 掉 apm.c 的關機部分,讓兩種方式的關機走同樣的流程。于是把 apm.c 的 check_events 函數中對 APM_SYS_SUSPEND 部分改寫為如下代碼:
  ret = exec_usermodehelper(poweroff_helper_path, argv, envp); if (ret) { printk(KERN_ERR “apm.c: failed to exec %s , errno = %dn”, poweroff_helper_path, errno); } break;
  定義了一個用戶態應用程序 poweroff_helper_path,當 POWEROFF 鍵按下的時候系統運行這個 kernel_helper 程序。我們再寫一個通過 sys_reboot 系統調用關機的程序,放在指定的位置下。死機的問題就解決了。
  2) 快速返回實模式重啟
  主要可以參考了 process.c 中的返回實模式的代碼,比如我把 real_mode_switch 換成如下代碼:
  // For fast reboot support static unsigned char fast_reboot_switch [] = { 0x66, 0x0f, 0x20, 0xc0, /* movl %cr0,%eax */ 0x66, 0x25, 0x10, 0x11, 0x11, 0x11, /* andl $0x11111110,%eax */ 0x66, 0x0f, 0x22, 0xc0, /* movl %eax,%cr0 */ 0xea, 0x00, 0x00, 0x00, 0x70 /* ljmp $0x7000,$0x0000 */ };
  系統就可以切換到實模式中,然后跳轉到 7000H:0 位置開始執行。
  6. ACPI 概述
  在 2.4.20 內核中 ACPI 模塊被注明為試驗和未完成,里面有一部分功能也許沒有實現。如果 APM 和 APCI 兩個模塊同時編譯進內核,APM 在 ACPI 前被加載,APM 起作用使 ACPI 退出。對于系統電量、電源實踐一類的支持(主要是在筆記本上有用),靠的是 acpid 這個 daemon 程序。
  沒有一個功能類似 apm 的應用程序切換狀態,acpi 的程序僅僅完成了對 acpi 狀態的查詢。用戶實現 S0-S4 的功能可以直接向 /proc/acpi/sleep 文件中寫入數字來實現。通過讀出 (cat) 其中的內容可以知道系統到底支持那些模式。
  acpi 模塊的源代碼主程序在 linux/drivers/acpi/driver.c 中,如果向 sleep 文件寫東西,就轉到了 linux/drivers/acpi/ospm/system/sm_osl.c 文件的 sm_osl_proc_write_sleep 函數中,這個函數后來調用了 sm_osl_suspend 函數。在這個函數里完成了各種功能,包括保護各種狀態。最后真正的 sleep 是通過對 acpi_enter_sleep_state 的調用完成的,這個函數在 Linux /drivers/acpi/hardware/hwsleep.c 文件中,這里寫了 acpi 的寄存器使系統進入 sleep 狀態。寫寄存器的指令在這個目錄下面的 hwregs.c 中。
  7. 總結
  本文對 acpi 的介紹非常簡略,實際上 ACPI 必定會成為將來 Linux 內核中首選的電源管理方式。由于目前官方代碼中 ACPI 版本較低,所以沒有太詳細的論述,希望將來的內核能有所改進。
?
下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1QW2893應急燈專用檢測芯片
  2. 590.40 KB  |  1次下載  |  免費
  3. 2低功耗藍牙BLE透傳模塊HM-BT4531的技術規格與應用指南
  4. 1.40 MB  |  1次下載  |  免費
  5. 3PC2570低Iq 理想二極管控制芯片中文資料
  6. 1.56 MB   |  1次下載  |  免費
  7. 4AG32VH 系列應用指南
  8. 0.60 MB   |  1次下載  |  免費
  9. 5Claroty-2024年全球CPS安全狀況:中斷對業務的影響
  10. 3.70 MB   |  1次下載  |  免費
  11. 6stm32g070數據手冊和使用手冊
  12. 12.06 MB   |  次下載  |  免費
  13. 7FS312B USB的PD和OC快充協議電壓誘騙控制器中文手冊
  14. 1.35 MB   |  次下載  |  免費
  15. 8SY8201矽力杰高效率快速響應,1A, 27V輸入 同步降壓調節器
  16. 510.16 KB  |  次下載  |  免費

本月

  1. 1AI智能眼鏡產業鏈分析
  2. 4.43 MB   |  471次下載  |  免費
  3. 2蘇泊爾電磁爐線路的電路原理圖資料合集
  4. 2.02 MB   |  300次下載  |  5 積分
  5. 3貼片三極管上的印字與真實名稱的對照表詳細說明
  6. 0.50 MB   |  95次下載  |  1 積分
  7. 4長虹液晶電視R-HS310B-5HF01的電源板電路原理圖
  8. 0.46 MB   |  91次下載  |  5 積分
  9. 5涂鴉各WiFi模塊原理圖加PCB封裝
  10. 11.75 MB   |  89次下載  |  1 積分
  11. 6錦銳科技CA51F2 SDK開發包
  12. 24.06 MB   |  43次下載  |  1 積分
  13. 7AO4803A雙P通道增強型場效應晶體管的數據手冊
  14. 0.11 MB   |  28次下載  |  2 積分
  15. 8錦銳CA51F005 SDK開發包
  16. 19.47 MB   |  19次下載  |  1 積分

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935127次下載  |  10 積分
  3. 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
  4. 1.48MB  |  420064次下載  |  10 積分
  5. 3Altium DXP2002下載入口
  6. 未知  |  233089次下載  |  10 積分
  7. 4電路仿真軟件multisim 10.0免費下載
  8. 340992  |  191388次下載  |  10 積分
  9. 5十天學會AVR單片機與C語言視頻教程 下載
  10. 158M  |  183342次下載  |  10 積分
  11. 6labview8.5下載
  12. 未知  |  81588次下載  |  10 積分
  13. 7Keil工具MDK-Arm免費下載
  14. 0.02 MB  |  73815次下載  |  10 積分
  15. 8LabVIEW 8.6下載
  16. 未知  |  65989次下載  |  10 積分
主站蜘蛛池模板: 国模吧2021新入口 | 777国产精品永久免费观看 | 天天干天天色综合 | 欧美性猛交xxxx黑人喷水 | 男人视频在线 | 在线欧美成人 | 美女毛片在线观看 | 在线欧美色 | 午夜毛片视频 | 亚洲第一视频 | 日本免费人成在线网站 | 老师你好滑下面好湿h | 伊人久久大香线蕉综合爱婷婷 | 给我一个可以看片的www日本 | 色噜噜狠狠大色综合 | 五月婷婷电影 | 夜夜夜爽爽爽久久久 | 国产成+人+综合+亚洲欧美丁香花 | 康熙古代高h细节肉爽文全文 | 免费在线观看污视频 | 午夜视频一区二区 | 玖玖在线精品 | 久久精彩免费视频 | 特大一级aaaaa毛片 | 精品精品国产自在久久高清 | 国产乱码精品一区二区 | 丁香八月婷婷 | 轻点灬大ji巴太大太深了 | 五月婷婷色综合 | 日韩一级片免费看 | 网站一级片 | 五月婷婷久| 亚洲午夜久久久精品影院 | 来啊mm影院亚洲mm影院 | sese亚洲| 鲁老汉精品视频在线观看 | 婷婷色人阁 | 国产高清免费不卡观看 | 四虎影视免费看 | 5151四虎永久在线精品免费 | 三级在线观看视频网站 |