为什么 Fuchsia OS 使用 .elf 作为内核映像?

问题描述

构建锆石后,我得到

lz@vm:~/fuchsia/out/default/kernel_arm64$ ls -la
total 73892
drwx------  4 lz lz     4096 jul 26 02:36 .
drwxrwxr-x 36 lz lz    20480 jul 26 02:39 ..
drwx------  4 lz lz     4096 jul 26 01:23 gen
-rwxrwxr-x  1 lz lz  3044192 jul 26 02:36 image
-rw-rw-r--  1 lz lz        0 jul 26 02:36 image.build-id.stamp
-rw-rw-r--  1 lz lz     3442 jul 26 02:36 image.map
-rwxrwxr-x  1 lz lz  2178064 jul 26 02:36 kernel.zbi
drwx------  8 lz lz     4096 jul 26 02:32 obj
-rw-rw-r--  1 lz lz    40021 jul 26 01:23 toolchain.ninja
-rwxrwxr-x  3 lz lz 66370040 jul 26 02:36 zircon.elf
-rw-rw-r--  1 lz lz       16 jul 26 02:36 zircon.elf.build-id.stamp
-rw-rw-r--  2 lz lz    36414 jul 26 01:03 zircon.elf-gdb.py
-rw-rw-r--  1 lz lz  3944049 jul 26 02:36 zircon.elf.map

如您所见,它创建了一个 .elf zircon 内核(image 也是一个 .elf 但我不知道与 zircon.elf 有什么区别)。

我在 COFF format 中看到过 ARM 内核,但在 ELF 中没有。为什么Fuchsia的内核Zircon会产生elf文件

解决方法

构建系统将内核镜像编译为ELF格式以进行调试和反汇编(该格式包含调试符号)。从那里,图像内容被剥离、扁平化并压缩为最终的 h = " case sample group outcome control 1 1 1 1 1 1 2 1 2 1 1 1 3 1 1 2 1 1 4 1 2 2 1 1 5 1 1 1 2 1 6 1 2 1 2 1 7 1 1 2 2 1 8 1 2 2 2 1 9 2 1 1 1 1 10 2 1 2 1 1 11 2 1 1 2 1 12 2 1 2 2 1 13 3 1 1 1 1 14 3 2 1 1 1 15 3 1 1 2 1 16 3 2 1 2 1 17 4 1 1 1 1 18 4 2 1 1 1 19 4 1 2 1 1 20 4 2 2 1 1 21 5 1 1 1 1 22 5 1 2 1 1 23 6 1 1 1 1 24 6 1 2 1 1 25 7 1 1 1 1 26 7 2 1 1 1 27 8 1 1 1 1 28 9 1 1 1 1 29 9 2 1 1 1 30 9 1 2 1 1 31 9 2 2 1 1 32 9 1 1 2 1 33 9 2 1 2 1 34 9 1 2 2 1 35 9 2 2 2 1 36 9 1 1 1 2 37 9 2 1 1 2 38 9 1 2 1 2 39 9 2 2 1 2 40 9 1 1 2 2 41 9 2 1 2 2 42 9 1 2 2 2 43 9 2 2 2 2 44 10 1 1 1 1 45 10 1 2 1 1 46 10 1 1 2 1 47 10 1 2 2 1 48 10 1 1 1 2 49 10 1 2 1 2 50 10 1 1 2 2 51 10 1 2 2 2 52 11 1 1 1 1 53 11 2 1 1 1 54 11 1 1 2 1 55 11 2 1 2 1 56 11 1 1 1 2 57 11 2 1 1 2 58 11 1 1 2 2 59 11 2 1 2 2 60 12 1 1 1 1 61 12 2 1 1 1 62 12 1 2 1 1 63 12 2 2 1 1 64 12 1 1 1 2 65 12 2 1 1 2 66 12 1 2 1 2 67 12 2 2 1 2 68 13 1 1 1 1 69 13 1 2 1 1 70 13 1 1 1 2 71 13 1 2 1 2 72 14 1 1 1 1 73 14 1 2 1 1 74 14 1 1 1 2 75 14 1 2 1 2 76 15 1 1 1 1 77 15 2 1 1 1 78 15 1 1 1 2 79 15 2 1 1 2 80 16 1 1 1 1 81 16 1 1 1 2" h = read.table(text=h,h=T) foo2 <- function(dat,study_col,group_col,outcome_col) { dat %>% dplyr::select({{study_col}},{{group_col}},{{outcome_col}}) %>% dplyr::group_by({{study_col}}) %>% dplyr::mutate(grp = stringr::str_c(n_distinct({{group_col}}) == 1,n_distinct({{outcome_col}}) == 1 )) %>% dplyr::ungroup(.) %>% dplyr::group_split(grp,.keep = FALSE) } 图像。

Zircon 引导映像 (ZBI) 是用于 Zircon 内核的专用格式。您可能会发现 Fuchsia.dev 上的以下页面很有帮助,其中涉及 ZBI 格式:Zircon kernel to userspace bootstrapping

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...