推 Ting1024: OS, Firmware 屬於kernel, 其他歸user。 10/07 21:59
→ zelkova: 請問判斷方式是看程式放在哪個memory space嗎? 10/07 22:19
推 loveflames: kernel:ring 0,高位址 user:ring 3,低位址 10/07 23:13
→ loveflames: 韌體 OS driver是kernel 10/07 23:14
推 loveflames: 一般的debugger只能看見user space 10/07 23:16
推 hst326: 不知道的一定是user lv, 寫kernel的不會問這問題了 10/07 23:44
→ zelkova: 我說明一下困惑我的是什麼地方好了 10/08 00:20
→ zelkova: 我之前寫的是library(xxx.so) 它會被燒成firmware 10/08 00:20
→ zelkova: xxx.so會被放到rootfs 開機的時候會被叫起來 10/08 00:29
推 shortoneal: firmware這個稱呼現在已經不專屬於kernel了... 10/08 00:33
→ shortoneal: 現在很多嵌入式系統整包image都有人叫他是fw 10/08 00:33
→ zelkova: 感覺xxx.so好像是kernel的東西 但是放在rootfs又可以給us 10/08 00:35
→ zelkova: er抽換掉 所以不清楚xxx.so定位是哪個level 10/08 00:35
→ watz0n: Google: User space memory access from the Linux kernel 10/08 01:02
→ zelkova: watz0n大大您好 IBM那篇 好像只有講paging, swapping機制 10/08 01:37
→ zelkova: 不過看那篇的時候我想到so好像是透過dlopen開起來的 10/08 01:59
→ zelkova: 看起來xxx.so應該就是user level的proccess嗎? 10/08 02:01
→ zelkova: 因為dlopen會請kernel用mmap把so掛到virtual memory? 10/08 02:01
推 askacis: rootfs裡都是userspace啊 10/08 02:43
→ askacis: 應該說除了kernel module之外… 10/08 02:43
→ askacis: kernel 就是指你的uImage/zlmage 10/08 02:45
推 askacis: 一般virtual memory是1:3這樣切 10/08 02:47
推 askacis: 但整個linux不論什麼模式都會跑在virtual memory上 10/08 02:51
推 askacis: bootloader會把kernel帶到記憶體上,然後自己解壓縮並初 10/08 02:58
→ askacis: 始化系統硬體之後開始執行userspace的第一個程式 10/08 02:59
推 askacis: 當然在執行之前會把 rootfs給掛載起來, 10/08 03:03
推 askacis: 這個程式會幫你跑inittab有的沒的東西 10/08 03:05
推 askacis: inittab通常會跑一些rc的script幫你把userspace 10/08 03:07
→ askacis: 但服務常式叫起來,之後這些程式想要 10/08 03:08
→ askacis: 存取硬體資源就需要透過系統呼叫 10/08 03:09
→ askacis: 如open read write ioctl mmap等 10/08 03:10
→ askacis: 切回kernel space去處理,然後再把結果送回userspace 10/08 03:11
推 askacis: 基本上你userspace跑的記憶體位置會在userspace專屬的虛 10/08 03:16
推 askacis: 擬空間,核心跟核心模組則是跑在另外專屬的虛擬空間裡 10/08 03:18
推 askacis: 也就是所謂1:3的分法 10/08 03:20
推 askacis: 一個情境就是userspace想要開啟一個uart 10/08 03:24
推 askacis: 所以使用open系統呼叫切到核心,核心幫你處理好之後再返 10/08 03:26
→ askacis: 回fd給你,之後userspace使用read來讀資料 10/08 03:27
→ askacis: 此時再切到kernel,由kernel幫你處理硬體中斷 10/08 03:28
→ askacis: 以及幫您從uart硬體fifo讀資料回記憶體上 10/08 03:29
推 askacis: 再把這個資料複製給你userspace的指標 10/08 03:30
→ askacis: 並切回userspace,就可讀到資料~ 10/08 03:31
→ RouterHsieh: 看你的程式是跑在kernel space還是user space啊 10/08 06:05
→ RouterHsieh: 跑在這兩者基本上要呼叫的API差蠻多的, 10/08 06:05
→ RouterHsieh: 這應該很好區分吧wwwwww 10/08 06:05
→ zelkova: 感謝幾位大大的幫忙<(_ _)> 10/08 08:30
→ KASUGAOSAKA: 感覺他在問user space/kernel space 10/08 18:44
推 usoko: 通常用的語言就會不同了 例如kernel用C/C++ user用java 10/08 20:23
→ usoko: 但還是有很多firmware不能算在kernel space 10/08 20:25
推 iamnumbea1: Kernel panic V.S segmentation fault 10/09 14:33
→ Lordaeron: 你的程式能直接存取kernel space 的資料,就kernel囉 10/09 16:44
推 loveflames: 只有kernel才能跑ring 0指令 10/09 17:39
推 PICASSO1: askacis, good job!!....^^ 10/09 22:09
推 roger00: 大推 11/07 22:26