解析天启rk3288源码 /kernel/drivers/char/virtd
virtd为编译后产生的中间文件,可使用ELF格式逆向
1、ELF文件内容解析
readelf: 可解析ELF文件的所有内容;
strings: 查看ELF文件中的字符串;
file : 查看ELF文件的信息;
nm : 查看ELF文件中的符号信息;
ldd : 查看ELF文件所依赖的库文件;
2、objdump
用于对ELF文件进行反汇编;
objdump -d ;反汇编部分可执行的二进制代码;
objdump -D ;反汇编全部的可执行的二进制代码;
objdump -S ;尽量把可执行的二进制代码反汇编成源码;
3、hexdump
以十六进制格式查看ELF格式的二进制可执行文件的内容;
hexdump -C elf_file_name
readelf -a virtd
查看文件信息
ELF Header: Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 Class: ELF32 Data: 2's complement, little endian Version: 1 (current) OS/ABI: UNIX - System V ABI Version: 0 Type: REL (Relocatable file) Machine: ARM Version: 0x1 Entry point address: 0x0 Start of program headers: 0 (bytes into file) Start of section headers: 7532 (bytes into file) Flags: 0x5000000, Version5 EABI Size of this header: 52 (bytes) Size of program headers: 0 (bytes) Number of program headers: 0 Size of section headers: 40 (bytes) Number of section headers: 32 Section header string table index: 29 Section Headers: [Nr] Name Type Addr Off Size ES Flg Lk Inf Al [ 0] NULL 00000000 000000 000000 00 0 0 0 [ 1] .text PROGBITS 00000000 000034 001728 00 AX 0 0 4 [ 2] .rel.text REL 00000000 00226c 000490 08 30 1 4 [ 3] .init.text PROGBITS 00000000 00175c 000090 00 AX 0 0 4 [ 4] .rel.init.text REL 00000000 0026fc 000060 08 30 3 4 [ 5] .exit.text PROGBITS 00000000 0017ec 00000c 00 AX 0 0 4 [ 6] .rel.exit.text REL 00000000 00275c 000010 08 30 5 4 [ 7] .rodata PROGBITS 00000000 0017f8 000090 00 A 0 0 4 [ 8] .rel.rodata REL 00000000 00276c 000030 08 30 7 4 [ 9] .rodata.str1.1 PROGBITS 00000000 001888 000158 01 AMS 0 0 1 [10] .ARM.extab.init.t PROGBITS 00000000 0019e0 000000 00 A 0 0 1 [11] .ARM.exidx.init.t ARM_EXIDX 00000000 0019e0 000008 00 AL 3 0 4 [12] .rel.ARM.exidx.in REL 00000000 00279c 000010 08 30 11 4 [13] .ARM.extab.exit.t PROGBITS 00000000 0019e8 000000 00 A 0 0 1 [14] .ARM.exidx.exit.t ARM_EXIDX 00000000 0019e8 000008 00 AL 5 0 4 [15] .rel.ARM.exidx.ex REL 00000000 0027ac 000010 08 30 14 4 [16] .ARM.extab PROGBITS 00000000 0019f0 00000c 00 A 0 0 4 [17] .ARM.exidx ARM_EXIDX 00000000 0019fc 000130 00 AL 1 0 4 [18] .rel.ARM.exidx REL 00000000 0027bc 000158 08 30 17 4 [19] .data PROGBITS 00000000 001b2c 000048 00 WA 0 0 4 [20] .rel.data REL 00000000 002914 000028 08 30 19 4 [21] .exitcall.exit PROGBITS 00000000 001b74 000004 00 WA 0 0 4 [22] .rel.exitcall.exi REL 00000000 00293c 000008 08 30 21 4 [23] .initcall7s.init PROGBITS 00000000 001b78 000004 00 WA 0 0 4 [24] .rel.initcall7s.i REL 00000000 002944 000008 08 30 23 4 [25] .bss NOBITS 00000000 001b7c 000024 00 WA 0 0 4 [26] .note.GNU-stack PROGBITS 00000000 001b7c 000000 00 0 0 1 [27] .comment PROGBITS 00000000 001b7c 00008d 01 MS 0 0 1 [28] .ARM.attributes ARM_ATTRIBUTES 00000000 001c09 00002f 00 0 0 1 [29] .shstrtab STRTAB 00000000 001c38 000134 00 0 0 1 [30] .symtab SYMTAB 00000000 00294c 000b80 10 31 115 4 [31] .strtab STRTAB 00000000 0034cc 0005fc 00 0 0 1 Key to Flags: W (write), A (alloc), X (execute), M (merge), S (strings) I (info), L (link order), G (group), T (TLS), E (exclude), x (unknown) O (extra OS processing required) o (OS specific), p (processor specific) There are no section groups in this file. There are no program headers in this file. Relocation section '.rel.text' at offset 0x226c contains 146 entries: Offset Info Type Sym.Value Sym. Name 00000078 00000102 R_ARM_ABS32 00000000 .text 0000007c 00000102 R_ARM_ABS32 00000000 .text 00000080 00000102 R_ARM_ABS32 00000000 .text 00000084 00000102 R_ARM_ABS32 00000000 .text 00000088 00000102 R_ARM_ABS32 00000000 .text 00000114 00009e1c R_ARM_CALL 00000000 memset 00000134 00009e1c R_ARM_CALL 00000000 memset 0000014c 00009e1c R_ARM_CALL 00000000 memset 00000164 00009e1c R_ARM_CALL 00000000 memset 000001a4 0000871c R_ARM_CALL 00000000 sg_init_one 000001c4 0000981c R_ARM_CALL 00000000 mmc_set_data_timeout 000001d0 0000a31c R_ARM_CALL 00000000 mmc_wait_for_req 000001ec 00009c1c R_ARM_CALL 00000000 dev_err 00000210 00009c1c R_ARM_CALL 00000000 dev_err 00000228 00007a1c R_ARM_CALL 00000000 ioctl_rpmb_card_status 00000248 00009c1c R_ARM_CALL 00000000 dev_err 00000258 00000502 R_ARM_ABS32 00000000 .rodata.str1.1 0000025c 00000502 R_ARM_ABS32 00000000 .rodata.str1.1 00000260 00000502 R_ARM_ABS32 00000000 .rodata.str1.1 00000290 0000961c R_ARM_CALL 00000000 warn_slowpath_null 000002d0 0000801c R_ARM_CALL 00000000 mmc_get_card 000002dc 0000a91c R_ARM_CALL 00000000 mmc_blk_part_switch 000002fc 00009c1c R_ARM_CALL 00000000 dev_err 0000030c 0000991c R_ARM_CALL 00000000 mmc_blk_reset 00000320 0000b41c R_ARM_CALL 00000000 mmc_blk_reset_success 00000338 00009c1c R_ARM_CALL 00000000 dev_err 000003a8 00009c1c R_ARM_CALL 00000000 dev_err 000003b0 0000771c R_ARM_CALL 00000000 dev_get_drvdata 000003bc 0000a91c R_ARM_CALL 00000000 mmc_blk_part_switch 000003c4 0000ab1c R_ARM_CALL 00000000 mmc_put_card 000003e0 00000502 R_ARM_ABS32 00000000 .rodata.str1.1 000003e4 00000502 R_ARM_ABS32 00000000 .rodata.str1.1 000003e8 00000502 R_ARM_ABS32 00000000 .rodata.str1.1 000003ec 00000502 R_ARM_ABS32 00000000 .rodata.str1.1 00000400 0000ae1c R_ARM_CALL 00000000 mmc_blk_get 00000434 0000931c R_ARM_CALL 00000000 mmc_blk_put 00000484 0000771c R_ARM_CALL 00000000 dev_get_drvdata 000004a4 00008a1c R_ARM_CALL 00000000 kmem_cache_alloc_trace 000004bc 00009b1c R_ARM_CALL 00000000 __mutex_init 000004dc 0000b702 R_ARM_ABS32 00000000 kmalloc_caches 000004e0 00000f02 R_ARM_ABS32 00000000 .bss 000004e4 00000502 R_ARM_ABS32 00000000 .rodata.str1.1 000004e8 00000c02 R_ARM_ABS32 00000000 .data 000005c4 00008f02 R_ARM_ABS32 00000000 arm_delay_ops 000005cc 00000f02 R_ARM_ABS32 00000000 .bss 000006c4 00008f02 R_ARM_ABS32 00000000 arm_delay_ops 00000714 0000901c R_ARM_CALL 000005e8 rk312x_efuse_readregs_ 00000758 0000941c R_ARM_CALL 00000000 crc32_le 00000768 0000941c R_ARM_CALL 00000000 crc32_le 00000784 00008e02 R_ARM_ABS32 00000000 rockchip_soc_id 00000790 00000f02 R_ARM_ABS32 00000000 .bss 00000794 00000f02 R_ARM_ABS32 00000000 .bss 000007b4 0000821c R_ARM_CALL 000006d0 system_efuse_serial 000007dc 00008c02 R_ARM_ABS32 00000000 system_serial_low 000007e0 0000a802 R_ARM_ABS32 00000000 system_serial_high 000007e8 00007b1d R_ARM_JUMP24 00000000 complete 000007ec 00000c02 R_ARM_ABS32 00000000 .data 000007f4 0000a21d R_ARM_JUMP24 00000000 wait_for_completion 000007f8 00000c02 R_ARM_ABS32 00000000 .data 0000080c 0000771c R_ARM_CALL 00000000 dev_get_drvdata 00000834 00008a1c R_ARM_CALL 00000000 kmem_cache_alloc_trace 0000084c 0000831c R_ARM_CALL 00000000 memcpy 00000894 0000861d R_ARM_JUMP24 000007e4 drm_dev_complete 00000898 0000b702 R_ARM_ABS32 00000000 kmalloc_caches 0000089c 00000c02 R_ARM_ABS32 00000000 .data 000008b0 0000851c R_ARM_CALL 00000000 kfree 000008c0 0000851c R_ARM_CALL 00000000 kfree 000008cc 00000f02 R_ARM_ABS32 00000000 .bss 000008d0 00000c02 R_ARM_ABS32 00000000 .data 000008e0 00000f02 R_ARM_ABS32 00000000 .bss 00000954 0000951c R_ARM_CALL 00000000 mutex_lock 0000097c 0000a71c R_ARM_CALL 000008e4 drm_cmd_fixup 000009a8 0000aa1c R_ARM_CALL 00000000 mutex_unlock 00000a18 00000102 R_ARM_ABS32 00000000 .text 00000a1c 00000102 R_ARM_ABS32 00000000 .text 00000a20 00000102 R_ARM_ABS32 00000000 .text 00000a24 00000102 R_ARM_ABS32 00000000 .text 00000a50 0000a01c R_ARM_CALL 00000000 __memzero 00000ac0 0000951c R_ARM_CALL 00000000 mutex_lock 00000ad0 0000a71c R_ARM_CALL 000008e4 drm_cmd_fixup 00000af4 0000aa1c R_ARM_CALL 00000000 mutex_unlock 00000bf8 0000951c R_ARM_CALL 00000000 mutex_lock 00000c08 0000a71c R_ARM_CALL 000008e4 drm_cmd_fixup 00000c2c 0000aa1c R_ARM_CALL 00000000 mutex_unlock 00000c4c 0000951c R_ARM_CALL 00000000 mutex_lock 00000c60 0000831c R_ARM_CALL 00000000 memcpy 00000c6c 0000aa1d R_ARM_JUMP24 00000000 mutex_unlock 00000ca4 0000831c R_ARM_CALL 00000000 memcpy 00000cb4 00008a1c R_ARM_CALL 00000000 kmem_cache_alloc_trace 00000cc8 00008a1c R_ARM_CALL 00000000 kmem_cache_alloc_trace 00000dc4 0000af1c R_ARM_CALL 00000930 drm_cmd_seq 00000dd0 0000b702 R_ARM_ABS32 00000000 kmalloc_caches 00000dd4 00000402 R_ARM_ABS32 00000000 .rodata 00000e8c 0000811c R_ARM_CALL 000005d4 dump_hex_buffer 00000e98 00009a1c R_ARM_CALL 00000000 printk 00000ea4 00000502 R_ARM_ABS32 00000000 .rodata.str1.1 00000ea8 00000502 R_ARM_ABS32 00000000 .rodata.str1.1 00001044 0000971c R_ARM_CALL 00000000 console_lock 0000104c 0000b51c R_ARM_CALL 00000000 msleep 0000105c 00007e1c R_ARM_CALL 00000000 __arm_ioremap 00001070 00009a1d R_ARM_JUMP24 00000000 printk 000010a4 00000502 R_ARM_ABS32 00000000 .rodata.str1.1 000010a8 00007802 R_ARM_ABS32 00000000 outer_cache 000010b4 0000911c R_ARM_CALL 00000c70 drm_get_version 000010cc 0000761c R_ARM_CALL 00000798 get_system_serial 000010d4 0000a61c R_ARM_CALL 00000c80 drm_get_data 00001104 0000881c R_ARM_CALL 000008d4 drm_dev_get 00001120 0000a51d R_ARM_JUMP24 00000000 nonseekable_open 00001150 0000ac1c R_ARM_CALL 00000000 __get_user_4 00001164 0000ac1c R_ARM_CALL 00000000 __get_user_4 00001184 00007c1c R_ARM_CALL 00000000 memdup_user 00001208 0000b31c R_ARM_CALL 00000000 __copy_from_user 0000121c 0000a01c R_ARM_CALL 00000000 __memzero 0000124c 0000a01c R_ARM_CALL 00000000 __memzero 00001298 0000731c R_ARM_CALL 00000b14 drm_read_cmd 000012a4 00007f1c R_ARM_CALL 000009bc drm_cmd_req 000012bc 0000811c R_ARM_CALL 000005d4 dump_hex_buffer 000012d0 0000811c R_ARM_CALL 000005d4 dump_hex_buffer 000012e4 0000811c R_ARM_CALL 000005d4 dump_hex_buffer 00001324 0000b21c R_ARM_CALL 00000000 __copy_to_user 0000133c 0000851c R_ARM_CALL 00000000 kfree 00001344 0000851c R_ARM_CALL 00000000 kfree 0000136c 00000502 R_ARM_ABS32 00000000 .rodata.str1.1 00001370 00000502 R_ARM_ABS32 00000000 .rodata.str1.1 00001374 00000502 R_ARM_ABS32 00000000 .rodata.str1.1 00001388 00008d1c R_ARM_CALL 00000000 capable 000013c8 0000b31c R_ARM_CALL 00000000 __copy_from_user 000013dc 0000a01c R_ARM_CALL 00000000 __memzero 00001400 0000b61c R_ARM_CALL 00000000 __kmalloc 00001464 0000af1c R_ARM_CALL 00000930 drm_cmd_seq 000014b4 0000b21c R_ARM_CALL 00000000 __copy_to_user 000014fc 0000851c R_ARM_CALL 00000000 kfree 00001520 0000851c R_ARM_CALL 00000000 kfree 000015d4 0000761c R_ARM_CALL 00000798 get_system_serial 00001610 0000911c R_ARM_CALL 00000c70 drm_get_version 00001650 0000a61c R_ARM_CALL 00000c80 drm_get_data 00001664 0000811c R_ARM_CALL 000005d4 dump_hex_buffer 00001698 0000b21c R_ARM_CALL 00000000 __copy_to_user 000016b8 0000811c R_ARM_CALL 000005d4 dump_hex_buffer 000016c0 0000741c R_ARM_CALL 00000c88 drm_get_frames_without 000016c8 0000b01c R_ARM_CALL 00000c44 drm_refresh_data 000016d0 0000a61c R_ARM_CALL 00000c80 drm_get_data 000016e0 0000811c R_ARM_CALL 000005d4 dump_hex_buffer 00001714 00000502 R_ARM_ABS32 00000000 .rodata.str1.1 00001718 00000502 R_ARM_ABS32 00000000 .rodata.str1.1 0000171c 00000502 R_ARM_ABS32 00000000 .rodata.str1.1 Relocation section '.rel.init.text' at offset 0x26fc contains 12 entries: Offset Info Type Sym.Value Sym. Name 00000004 0000791c R_ARM_CALL 000007f0 drm_dev_wait 00000008 0000881c R_ARM_CALL 000008d4 drm_dev_get 00000014 00009f1c R_ARM_CALL 000007ac system_serial_init 0000001c 0000741c R_ARM_CALL 00000c88 drm_get_frames_without 00000024 0000b01c R_ARM_CALL 00000c44 drm_refresh_data 0000002c 0000a41c R_ARM_CALL 000010ac drm_check 00000058 00009a1c R_ARM_CALL 00000000 printk 00000060 0000a11c R_ARM_CALL 00000000 misc_register 00000074 00008b1c R_ARM_CALL 0000103c vendor_do_fail 00000080 00008e02 R_ARM_ABS32 00000000 rockchip_soc_id 00000088 00000502 R_ARM_ABS32 00000000 .rodata.str1.1 0000008c 00000c02 R_ARM_ABS32 00000000 .data Relocation section '.rel.exit.text' at offset 0x275c contains 2 entries: Offset Info Type Sym.Value Sym. Name 00000004 0000751d R_ARM_JUMP24 00000000 misc_deregister 00000008 00000c02 R_ARM_ABS32 00000000 .data Relocation section '.rel.rodata' at offset 0x276c contains 6 entries: Offset Info Type Sym.Value Sym. Name 00000018 00004b02 R_ARM_ABS32 00000f88 vendor_encode_v1 0000001c 00004a02 R_ARM_ABS32 00000f3c vendor_decode_v1 00000024 00009202 R_ARM_ABS32 00000000 noop_llseek 00000044 00006202 R_ARM_ABS32 00001724 drm_ioctl 00000050 00005902 R_ARM_ABS32 000010f8 drm_open 00000058 00005302 R_ARM_ABS32 000010f0 drm_release Relocation section '.rel.ARM.exidx.init.text' at offset 0x279c contains 2 entries: Offset Info Type Sym.Value Sym. Name 00000000 0000022a R_ARM_PREL31 00000000 .init.text 00000000 00007d00 R_ARM_NONE 00000000 __aeabi_unwind_cpp_pr0 Relocation section '.rel.ARM.exidx.exit.text' at offset 0x27ac contains 2 entries: Offset Info Type Sym.Value Sym. Name 00000000 0000032a R_ARM_PREL31 00000000 .exit.text 00000000 00007d00 R_ARM_NONE 00000000 __aeabi_unwind_cpp_pr0 Relocation section '.rel.ARM.exidx' at offset 0x27bc contains 43 entries: Offset Info Type Sym.Value Sym. Name 00000000 0000012a R_ARM_PREL31 00000000 .text 00000000 00007d00 R_ARM_NONE 00000000 __aeabi_unwind_cpp_pr0 00000008 0000012a R_ARM_PREL31 00000000 .text 00000010 0000012a R_ARM_PREL31 00000000 .text 00000018 0000012a R_ARM_PREL31 00000000 .text 00000020 0000012a R_ARM_PREL31 00000000 .text 00000028 0000012a R_ARM_PREL31 00000000 .text 00000030 0000012a R_ARM_PREL31 00000000 .text 00000038 0000012a R_ARM_PREL31 00000000 .text 00000038 0000b100 R_ARM_NONE 00000000 __aeabi_unwind_cpp_pr1 0000003c 00000a2a R_ARM_PREL31 00000000 .ARM.extab 00000040 0000012a R_ARM_PREL31 00000000 .text 00000048 0000012a R_ARM_PREL31 00000000 .text 00000050 0000012a R_ARM_PREL31 00000000 .text 00000058 0000012a R_ARM_PREL31 00000000 .text 00000060 0000012a R_ARM_PREL31 00000000 .text 00000068 0000012a R_ARM_PREL31 00000000 .text 00000070 0000012a R_ARM_PREL31 00000000 .text 00000078 0000012a R_ARM_PREL31 00000000 .text 00000080 0000012a R_ARM_PREL31 00000000 .text 00000088 0000012a R_ARM_PREL31 00000000 .text 00000090 0000012a R_ARM_PREL31 00000000 .text 00000098 0000012a R_ARM_PREL31 00000000 .text 000000a0 0000012a R_ARM_PREL31 00000000 .text 000000a8 0000012a R_ARM_PREL31 00000000 .text 000000b0 0000012a R_ARM_PREL31 00000000 .text 000000b8 0000012a R_ARM_PREL31 00000000 .text 000000c0 0000012a R_ARM_PREL31 00000000 .text 000000c8 0000012a R_ARM_PREL31 00000000 .text 000000c8 00007d00 R_ARM_NONE 00000000 __aeabi_unwind_cpp_pr0 000000d0 0000012a R_ARM_PREL31 00000000 .text 000000d8 0000012a R_ARM_PREL31 00000000 .text 000000e0 0000012a R_ARM_PREL31 00000000 .text 000000e8 0000012a R_ARM_PREL31 00000000 .text 000000f0 0000012a R_ARM_PREL31 00000000 .text 000000f8 0000012a R_ARM_PREL31 00000000 .text 000000f8 00007d00 R_ARM_NONE 00000000 __aeabi_unwind_cpp_pr0 00000100 0000012a R_ARM_PREL31 00000000 .text 00000108 0000012a R_ARM_PREL31 00000000 .text 00000110 0000012a R_ARM_PREL31 00000000 .text 00000118 0000012a R_ARM_PREL31 00000000 .text 00000120 0000012a R_ARM_PREL31 00000000 .text 00000128 0000012a R_ARM_PREL31 00000000 .text Relocation section '.rel.data' at offset 0x2914 contains 5 entries: Offset Info Type Sym.Value Sym. Name 00000000 00001f02 R_ARM_ABS32 000003f0 mmc_blk_drm_cmd_seq 0000001c 00009d02 R_ARM_ABS32 00000014 comp_rdev 00000020 00009d02 R_ARM_ABS32 00000014 comp_rdev 00000028 00000502 R_ARM_ABS32 00000000 .rodata.str1.1 0000002c 00000402 R_ARM_ABS32 00000000 .rodata Relocation section '.rel.exitcall.exit' at offset 0x293c contains 1 entries: Offset Info Type Sym.Value Sym. Name 00000000 00006402 R_ARM_ABS32 00000000 drm_misc_exit Relocation section '.rel.initcall7s.init' at offset 0x2944 contains 1 entries: Offset Info Type Sym.Value Sym. Name 00000000 00005602 R_ARM_ABS32 00000000 drm_misc_init Unwind table index '.ARM.exidx.init.text' at offset 0x19e0 contains 1 entries: 0x0 <drm_misc_init>: 0x80a8b0b0 Compact model index: 0 0xa8 pop {r4, r14} 0xb0 finish 0xb0 finish Unwind table index '.ARM.exidx.exit.text' at offset 0x19e8 contains 1 entries: 0x0 <drm_misc_exit>: 0x80b0b0b0 Compact model index: 0 0xb0 finish 0xb0 finish 0xb0 finish Unwind table index '.ARM.exidx' at offset 0x19fc contains 38 entries: 0x0 <drm_request_verify>: 0x80a9b0b0 Compact model index: 0 0xa9 pop {r4, r5, r14} 0xb0 finish 0xb0 finish 0xdc <mmc_drm_send_cmd>: 0x8036afb0 Compact model index: 0 0x36 vsp = vsp + 220 0xaf pop {r4, r5, r6, r7, r8, r9, r10, r11, r14} 0xb0 finish 0x264 <mmc_blk_drm_process>: 0x80b103ac Compact model index: 0 0xb1 0x03 pop {r0, r1} 0xac pop {r4, r5, r6, r7, r8, r14} 0x3f0 <mmc_blk_drm_cmd_seq>: 0x80aab0b0 Compact model index: 0 0xaa pop {r4, r5, r6, r14} 0xb0 finish 0xb0 finish 0x440 <mmc_blk_drm_part_get>: 0x80b0b0b0 Compact model index: 0 0xb0 finish 0xb0 finish 0xb0 finish 0x47c <drm_rdev_init.constprop.3>: 0x80aab0b0 Compact model index: 0 0xaa pop {r4, r5, r6, r14} 0xb0 finish 0xb0 finish 0x4ec <rk3288_efuse_readregs_drm.constprop.4>: 0x80acb0b0 Compact model index: 0 0xac pop {r4, r5, r6, r7, r8, r14} 0xb0 finish 0xb0 finish 0x5d4 <dump_hex_buffer>: @0x0 Compact model index: 1 0x9b vsp = r11 0x40 vsp = vsp - 4 0x84 0x80 pop {r11, r14} 0xb0 finish 0xb0 finish 0x5e8 <rk312x_efuse_readregs_drm>: 0x80b108af Compact model index: 0 0xb1 0x08 pop {r3} 0xaf pop {r4, r5, r6, r7, r8, r9, r10, r11, r14} 0x6d0 <system_efuse_serial>: 0x8004a9b0 Compact model index: 0 0x04 vsp = vsp + 20 0xa9 pop {r4, r5, r14} 0xb0 finish 0x798 <get_system_serial>: 0x80b0b0b0 Compact model index: 0 0xb0 finish 0xb0 finish 0xb0 finish 0x7ac <system_serial_init>: 0x80a8b0b0 Compact model index: 0 0xa8 pop {r4, r14} 0xb0 finish 0xb0 finish 0x7e4 <drm_dev_complete>: 0x80b0b0b0 Compact model index: 0 0xb0 finish 0xb0 finish 0xb0 finish 0x7f0 <drm_dev_wait>: 0x80b0b0b0 Compact model index: 0 0xb0 finish 0xb0 finish 0xb0 finish 0x7fc <mmc_blk_emmc_add>: 0x80aab0b0 Compact model index: 0 0xaa pop {r4, r5, r6, r14} 0xb0 finish 0xb0 finish 0x8a0 <mmc_blk_emmc_remove>: 0x80b108a9 Compact model index: 0 0xb1 0x08 pop {r3} 0xa9 pop {r4, r5, r14} 0x8d4 <drm_dev_get>: 0x80b0b0b0 Compact model index: 0 0xb0 finish 0xb0 finish 0xb0 finish 0x8e4 <drm_cmd_fixup>: 0x80a9b0b0 Compact model index: 0 0xa9 pop {r4, r5, r14} 0xb0 finish 0xb0 finish 0x930 <drm_cmd_seq>: 0x80aab0b0 Compact model index: 0 0xaa pop {r4, r5, r6, r14} 0xb0 finish 0xb0 finish 0x9bc <drm_cmd_req>: 0x800bacb0 Compact model index: 0 0x0b vsp = vsp + 48 0xac pop {r4, r5, r6, r7, r8, r14} 0xb0 finish 0xb14 <drm_read_cmd>: 0x800ca9b0 Compact model index: 0 0x0c vsp = vsp + 52 0xa9 pop {r4, r5, r14} 0xb0 finish 0xc44 <drm_refresh_data>: 0x80a8b0b0 Compact model index: 0 0xa8 pop {r4, r14} 0xb0 finish 0xb0 finish 0xc70 <drm_get_version>: 0x80b0b0b0 Compact model index: 0 0xb0 finish 0xb0 finish 0xb0 finish 0xc80 <drm_get_data>: 0x80b0b0b0 Compact model index: 0 0xb0 finish 0xb0 finish 0xb0 finish 0xc88 <drm_get_frames_without_key>: 0x8010a9b0 Compact model index: 0 0x10 vsp = vsp + 68 0xa9 pop {r4, r5, r14} 0xb0 finish 0xdd8 <underground_explode>: 0x80b10fa8 Compact model index: 0 0xb1 0x0f pop {r0, r1, r2, r3} 0xa8 pop {r4, r14} 0xeac <vendor_decode_v1.part.0>: 0x80aab0b0 Compact model index: 0 0xaa pop {r4, r5, r6, r14} 0xb0 finish 0xb0 finish 0xf3c <vendor_decode_v1>: 0x80a8b0b0 Compact model index: 0 0xa8 pop {r4, r14} 0xb0 finish 0xb0 finish 0xf88 <vendor_encode_v1>: 0x8001b0b0 Compact model index: 0 0x01 vsp = vsp + 8 0xb0 finish 0xb0 finish 0x103c <vendor_do_fail>: 0x80a8b0b0 Compact model index: 0 0xa8 pop {r4, r14} 0xb0 finish 0xb0 finish 0x10ac <drm_check>: 0x80b103a8 Compact model index: 0 0xb1 0x03 pop {r0, r1} 0xa8 pop {r4, r14} 0x10f0 <drm_release>: 0x80b0b0b0 Compact model index: 0 0xb0 finish 0xb0 finish 0xb0 finish 0x10f8 <drm_open>: 0x80b108a9 Compact model index: 0 0xb1 0x08 pop {r3} 0xa9 pop {r4, r5, r14} 0x112c <drm_cmd_copy_from_user>: 0x80b108a9 Compact model index: 0 0xb1 0x08 pop {r3} 0xa9 pop {r4, r5, r14} 0x11a8 <drm_ioctl_req_cmd>: 0x800c3fab Compact model index: 0 0x0c vsp = vsp + 52 0x3f vsp = vsp + 256 0xab pop {r4, r5, r6, r7, r14} 0x1378 <drm_ioctl_seq_cmd>: 0x80b10fae Compact model index: 0 0xb1 0x0f pop {r0, r1, r2, r3} 0xae pop {r4, r5, r6, r7, r8, r9, r10, r14} 0x1548 <__drm_ioctl>: 0x8004a9b0 Compact model index: 0 0x04 vsp = vsp + 20 0xa9 pop {r4, r5, r14} 0xb0 finish 0x1724 <drm_ioctl>: 0x80b0b0b0 Compact model index: 0 0xb0 finish 0xb0 finish 0xb0 finish Symbol table '.symtab' contains 184 entries: Num: Value Size Type Bind Vis Ndx Name 0: 00000000 0 NOTYPE LOCAL DEFAULT UND 1: 00000000 0 SECTION LOCAL DEFAULT 1 2: 00000000 0 SECTION LOCAL DEFAULT 3 3: 00000000 0 SECTION LOCAL DEFAULT 5 4: 00000000 0 SECTION LOCAL DEFAULT 7 5: 00000000 0 SECTION LOCAL DEFAULT 9 6: 00000000 0 SECTION LOCAL DEFAULT 10 7: 00000000 0 SECTION LOCAL DEFAULT 11 8: 00000000 0 SECTION LOCAL DEFAULT 13 9: 00000000 0 SECTION LOCAL DEFAULT 14 10: 00000000 0 SECTION LOCAL DEFAULT 16 11: 00000000 0 SECTION LOCAL DEFAULT 17 12: 00000000 0 SECTION LOCAL DEFAULT 19 13: 00000000 0 SECTION LOCAL DEFAULT 21 14: 00000000 0 SECTION LOCAL DEFAULT 23 15: 00000000 0 SECTION LOCAL DEFAULT 25 16: 00000000 0 SECTION LOCAL DEFAULT 26 17: 00000000 0 SECTION LOCAL DEFAULT 27 18: 00000000 0 SECTION LOCAL DEFAULT 28 19: 00000000 0 FILE LOCAL DEFAULT ABS core.c 20: 00000000 0 NOTYPE LOCAL DEFAULT 1 $a 21: 00000000 220 FUNC LOCAL DEFAULT 1 drm_request_verify 22: 00000078 0 NOTYPE LOCAL DEFAULT 1 $d 23: 0000008c 0 NOTYPE LOCAL DEFAULT 1 $a 24: 00000000 0 NOTYPE LOCAL DEFAULT 17 $d 25: 000000dc 392 FUNC LOCAL DEFAULT 1 mmc_drm_send_cmd 26: 00000258 0 NOTYPE LOCAL DEFAULT 1 $d 27: 00000264 0 NOTYPE LOCAL DEFAULT 1 $a 28: 00000264 396 FUNC LOCAL DEFAULT 1 mmc_blk_drm_process 29: 000003e0 0 NOTYPE LOCAL DEFAULT 1 $d 30: 000003f0 0 NOTYPE LOCAL DEFAULT 1 $a 31: 000003f0 80 FUNC LOCAL DEFAULT 1 mmc_blk_drm_cmd_seq 32: 00000440 60 FUNC LOCAL DEFAULT 1 mmc_blk_drm_part_get 33: 0000047c 112 FUNC LOCAL DEFAULT 1 drm_rdev_init.constprop.3 34: 000004dc 0 NOTYPE LOCAL DEFAULT 1 $d 35: 000004ec 0 NOTYPE LOCAL DEFAULT 1 $a 36: 000004ec 232 FUNC LOCAL DEFAULT 1 rk3288_efuse_readregs_drm 37: 000005c0 0 NOTYPE LOCAL DEFAULT 1 $d 38: 000005d4 0 NOTYPE LOCAL DEFAULT 1 $a 39: 00000000 0 NOTYPE LOCAL DEFAULT 16 $d 40: 000006c0 0 NOTYPE LOCAL DEFAULT 1 $d 41: 000006d0 0 NOTYPE LOCAL DEFAULT 1 $a 42: 00000784 0 NOTYPE LOCAL DEFAULT 1 $d 43: 00000798 0 NOTYPE LOCAL DEFAULT 1 $a 44: 000007dc 0 NOTYPE LOCAL DEFAULT 1 $d 45: 000007e4 0 NOTYPE LOCAL DEFAULT 1 $a 46: 000007ec 0 NOTYPE LOCAL DEFAULT 1 $d 47: 000007f0 0 NOTYPE LOCAL DEFAULT 1 $a 48: 000007f8 0 NOTYPE LOCAL DEFAULT 1 $d 49: 000007fc 0 NOTYPE LOCAL DEFAULT 1 $a 50: 00000898 0 NOTYPE LOCAL DEFAULT 1 $d 51: 000008a0 0 NOTYPE LOCAL DEFAULT 1 $a 52: 000008cc 0 NOTYPE LOCAL DEFAULT 1 $d 53: 000008d4 0 NOTYPE LOCAL DEFAULT 1 $a 54: 000008e0 0 NOTYPE LOCAL DEFAULT 1 $d 55: 000008e4 0 NOTYPE LOCAL DEFAULT 1 $a 56: 00000a18 0 NOTYPE LOCAL DEFAULT 1 $d 57: 00000a28 0 NOTYPE LOCAL DEFAULT 1 $a 58: 00000dd0 0 NOTYPE LOCAL DEFAULT 1 $d 59: 00000000 0 NOTYPE LOCAL DEFAULT 19 $d 60: 00000000 20 OBJECT LOCAL DEFAULT 19 mmc_drm_dev_ops 61: 00000000 0 NOTYPE LOCAL DEFAULT 25 $d 62: 00000000 0 OBJECT LOCAL DEFAULT 25 __key.22596 63: 00000000 4 OBJECT LOCAL DEFAULT 25 grdev 64: 00000004 32 OBJECT LOCAL DEFAULT 25 id_buf.22390 65: 00000000 0 FILE LOCAL DEFAULT ABS drm.c 66: 00000dd8 0 NOTYPE LOCAL DEFAULT 1 $a 67: 00000dd8 212 FUNC LOCAL DEFAULT 1 underground_explode 68: 00000ea4 0 NOTYPE LOCAL DEFAULT 1 $d 69: 000000c8 0 NOTYPE LOCAL DEFAULT 17 $d 70: 00000eac 0 NOTYPE LOCAL DEFAULT 1 $a 71: 00000eac 144 FUNC LOCAL DEFAULT 1 vendor_decode_v1.part.0 72: 00000f34 0 NOTYPE LOCAL DEFAULT 1 $d 73: 00000f3c 0 NOTYPE LOCAL DEFAULT 1 $a 74: 00000f3c 76 FUNC LOCAL DEFAULT 1 vendor_decode_v1 75: 00000f88 180 FUNC LOCAL DEFAULT 1 vendor_encode_v1 76: 00001034 0 NOTYPE LOCAL DEFAULT 1 $d 77: 0000103c 0 NOTYPE LOCAL DEFAULT 1 $a 78: 000010a0 0 NOTYPE LOCAL DEFAULT 1 $d 79: 000010ac 0 NOTYPE LOCAL DEFAULT 1 $a 80: 00000010 0 NOTYPE LOCAL DEFAULT 7 $d 81: 00000000 0 FILE LOCAL DEFAULT ABS mdev.c 82: 000010f0 0 NOTYPE LOCAL DEFAULT 1 $a 83: 000010f0 8 FUNC LOCAL DEFAULT 1 drm_release 84: 000000f8 0 NOTYPE LOCAL DEFAULT 17 $d 85: 00000000 0 NOTYPE LOCAL DEFAULT 3 $a 86: 00000000 144 FUNC LOCAL DEFAULT 3 drm_misc_init 87: 00000080 0 NOTYPE LOCAL DEFAULT 3 $d 88: 00000000 0 NOTYPE LOCAL DEFAULT 11 $d 89: 000010f8 52 FUNC LOCAL DEFAULT 1 drm_open 90: 0000112c 124 FUNC LOCAL DEFAULT 1 drm_cmd_copy_from_user 91: 000011a8 464 FUNC LOCAL DEFAULT 1 drm_ioctl_req_cmd 92: 00001364 0 NOTYPE LOCAL DEFAULT 1 $d 93: 00001378 0 NOTYPE LOCAL DEFAULT 1 $a 94: 00001378 464 FUNC LOCAL DEFAULT 1 drm_ioctl_seq_cmd 95: 00001548 476 FUNC LOCAL DEFAULT 1 __drm_ioctl 96: 00001700 0 NOTYPE LOCAL DEFAULT 1 $d 97: 00001724 0 NOTYPE LOCAL DEFAULT 1 $a 98: 00001724 4 FUNC LOCAL DEFAULT 1 drm_ioctl 99: 00000000 0 NOTYPE LOCAL DEFAULT 5 $a 100: 00000000 12 FUNC LOCAL DEFAULT 5 drm_misc_exit 101: 00000008 0 NOTYPE LOCAL DEFAULT 5 $d 102: 00000000 0 NOTYPE LOCAL DEFAULT 14 $d 103: 00000020 0 NOTYPE LOCAL DEFAULT 7 $d 104: 00000020 112 OBJECT LOCAL DEFAULT 7 drm_fops 105: 00000000 0 NOTYPE LOCAL DEFAULT 21 $d 106: 00000000 4 OBJECT LOCAL DEFAULT 21 __exitcall_drm_misc_exit 107: 00000024 0 NOTYPE LOCAL DEFAULT 19 $d 108: 00000024 36 OBJECT LOCAL DEFAULT 19 vmdrm_miscdev 109: 00000000 0 NOTYPE LOCAL DEFAULT 23 $d 110: 00000000 4 OBJECT LOCAL DEFAULT 23 __initcall_drm_misc_init7 111: 00000000 0 NOTYPE LOCAL DEFAULT 7 $d 112: 00000000 0 NOTYPE LOCAL DEFAULT 9 $d 113: 000000c9 0 NOTYPE LOCAL DEFAULT 9 $d 114: 00000108 0 NOTYPE LOCAL DEFAULT 9 $d 115: 00000b14 304 FUNC GLOBAL DEFAULT 1 drm_read_cmd 116: 00000c88 336 FUNC GLOBAL DEFAULT 1 drm_get_frames_without_ke 117: 00000000 0 NOTYPE GLOBAL DEFAULT UND misc_deregister 118: 00000798 20 FUNC GLOBAL DEFAULT 1 get_system_serial 119: 00000000 0 NOTYPE GLOBAL DEFAULT UND dev_get_drvdata 120: 00000000 0 NOTYPE GLOBAL DEFAULT UND outer_cache 121: 000007f0 12 FUNC GLOBAL DEFAULT 1 drm_dev_wait 122: 00000000 0 NOTYPE GLOBAL DEFAULT UND ioctl_rpmb_card_status_po 123: 00000000 0 NOTYPE GLOBAL DEFAULT UND complete 124: 00000000 0 NOTYPE GLOBAL DEFAULT UND memdup_user 125: 00000000 0 NOTYPE GLOBAL DEFAULT UND __aeabi_unwind_cpp_pr0 126: 00000000 0 NOTYPE GLOBAL DEFAULT UND __arm_ioremap 127: 000009bc 344 FUNC GLOBAL DEFAULT 1 drm_cmd_req 128: 00000000 0 NOTYPE GLOBAL DEFAULT UND mmc_get_card 129: 000005d4 20 FUNC GLOBAL DEFAULT 1 dump_hex_buffer 130: 000006d0 200 FUNC GLOBAL DEFAULT 1 system_efuse_serial 131: 00000000 0 NOTYPE GLOBAL DEFAULT UND memcpy 132: 00000010 16 OBJECT GLOBAL DEFAULT 7 gvlist 133: 00000000 0 NOTYPE GLOBAL DEFAULT UND kfree 134: 000007e4 12 FUNC GLOBAL DEFAULT 1 drm_dev_complete 135: 00000000 0 NOTYPE GLOBAL DEFAULT UND sg_init_one 136: 000008d4 16 FUNC GLOBAL DEFAULT 1 drm_dev_get 137: 000008a0 52 FUNC GLOBAL DEFAULT 1 mmc_blk_emmc_remove 138: 00000000 0 NOTYPE GLOBAL DEFAULT UND kmem_cache_alloc_trace 139: 0000103c 112 FUNC GLOBAL DEFAULT 1 vendor_do_fail 140: 00000000 0 NOTYPE GLOBAL DEFAULT UND system_serial_low 141: 00000000 0 NOTYPE GLOBAL DEFAULT UND capable 142: 00000000 0 NOTYPE GLOBAL DEFAULT UND rockchip_soc_id 143: 00000000 0 NOTYPE GLOBAL DEFAULT UND arm_delay_ops 144: 000005e8 232 FUNC GLOBAL DEFAULT 1 rk312x_efuse_readregs_drm 145: 00000c70 16 FUNC GLOBAL DEFAULT 1 drm_get_version 146: 00000000 0 NOTYPE GLOBAL DEFAULT UND noop_llseek 147: 00000000 0 NOTYPE GLOBAL DEFAULT UND mmc_blk_put 148: 00000000 0 NOTYPE GLOBAL DEFAULT UND crc32_le 149: 00000000 0 NOTYPE GLOBAL DEFAULT UND mutex_lock 150: 00000000 0 NOTYPE GLOBAL DEFAULT UND warn_slowpath_null 151: 00000000 0 NOTYPE GLOBAL DEFAULT UND console_lock 152: 00000000 0 NOTYPE GLOBAL DEFAULT UND mmc_set_data_timeout 153: 00000000 0 NOTYPE GLOBAL DEFAULT UND mmc_blk_reset 154: 00000000 0 NOTYPE GLOBAL DEFAULT UND printk 155: 00000000 0 NOTYPE GLOBAL DEFAULT UND __mutex_init 156: 00000000 0 NOTYPE GLOBAL DEFAULT UND dev_err 157: 00000014 16 OBJECT GLOBAL DEFAULT 19 comp_rdev 158: 00000000 0 NOTYPE GLOBAL DEFAULT UND memset 159: 000007ac 56 FUNC GLOBAL DEFAULT 1 system_serial_init 160: 00000000 0 NOTYPE GLOBAL DEFAULT UND __memzero 161: 00000000 0 NOTYPE GLOBAL DEFAULT UND misc_register 162: 00000000 0 NOTYPE GLOBAL DEFAULT UND wait_for_completion 163: 00000000 0 NOTYPE GLOBAL DEFAULT UND mmc_wait_for_req 164: 000010ac 68 FUNC GLOBAL DEFAULT 1 drm_check 165: 00000000 0 NOTYPE GLOBAL DEFAULT UND nonseekable_open 166: 00000c80 8 FUNC GLOBAL DEFAULT 1 drm_get_data 167: 000008e4 76 FUNC GLOBAL DEFAULT 1 drm_cmd_fixup 168: 00000000 0 NOTYPE GLOBAL DEFAULT UND system_serial_high 169: 00000000 0 NOTYPE GLOBAL DEFAULT UND mmc_blk_part_switch 170: 00000000 0 NOTYPE GLOBAL DEFAULT UND mutex_unlock 171: 00000000 0 NOTYPE GLOBAL DEFAULT UND mmc_put_card 172: 00000000 0 NOTYPE GLOBAL DEFAULT UND __get_user_4 173: 000007fc 164 FUNC GLOBAL DEFAULT 1 mmc_blk_emmc_add 174: 00000000 0 NOTYPE GLOBAL DEFAULT UND mmc_blk_get 175: 00000930 140 FUNC GLOBAL DEFAULT 1 drm_cmd_seq 176: 00000c44 44 FUNC GLOBAL DEFAULT 1 drm_refresh_data 177: 00000000 0 NOTYPE GLOBAL DEFAULT UND __aeabi_unwind_cpp_pr1 178: 00000000 0 NOTYPE GLOBAL DEFAULT UND __copy_to_user 179: 00000000 0 NOTYPE GLOBAL DEFAULT UND __copy_from_user 180: 00000000 0 NOTYPE GLOBAL DEFAULT UND mmc_blk_reset_success 181: 00000000 0 NOTYPE GLOBAL DEFAULT UND msleep 182: 00000000 0 NOTYPE GLOBAL DEFAULT UND __kmalloc 183: 00000000 0 NOTYPE GLOBAL DEFAULT UND kmalloc_caches
查看程序静态文本
strings -a virtd
cmd error (%d) data error (%d) Card Status=0x%08X, error %d drivers/char/drm/core.c Invalid RPMB partition switch (%d)! eMMC card reset failed (%d) failed (%d) to handle RPMB request &rdev->lock randNum: 3error to ioremap base 67ff base ret %d key_mac[out]: nonce[out]: data: data: before data: new data: vmdrm0 GCC: (GNU) 4.6.x-google 20120106 (prerelease) GCC: (GNU) 4.6.x-google 20120106 (prerelease) GCC: (GNU) 4.6.x-google 20120106 (prerelease) aeabi .symtab .strtab .shstrtab .rel.text .rel.init.text .rel.exit.text .rel.rodata .rodata.str1.1 .ARM.extab.init.text .rel.ARM.exidx.init.text .ARM.extab.exit.text .rel.ARM.exidx.exit.text .ARM.extab .rel.ARM.exidx .rel.data .rel.exitcall.exit .rel.initcall7s.init .bss .note.GNU-stack .comment .ARM.attributes core.c drm_request_verify mmc_drm_send_cmd mmc_blk_drm_process mmc_blk_drm_cmd_seq mmc_blk_drm_part_get drm_rdev_init.constprop.3 rk3288_efuse_readregs_drm.constprop.4 mmc_drm_dev_ops __key.22596 grdev id_buf.22390 drm.c underground_explode vendor_decode_v1.part.0 vendor_decode_v1 vendor_encode_v1 mdev.c drm_release drm_misc_init drm_open drm_cmd_copy_from_user drm_ioctl_req_cmd drm_ioctl_seq_cmd __drm_ioctl drm_ioctl drm_misc_exit drm_fops __exitcall_drm_misc_exit vmdrm_miscdev __initcall_drm_misc_init7s drm_read_cmd drm_get_frames_without_key misc_deregister get_system_serial dev_get_drvdata outer_cache drm_dev_wait ioctl_rpmb_card_status_poll complete memdup_user __aeabi_unwind_cpp_pr0 __arm_ioremap drm_cmd_req mmc_get_card dump_hex_buffer system_efuse_serial memcpy gvlist kfree drm_dev_complete sg_init_one drm_dev_get mmc_blk_emmc_remove kmem_cache_alloc_trace vendor_do_fail system_serial_low capable rockchip_soc_id arm_delay_ops rk312x_efuse_readregs_drm drm_get_version noop_llseek mmc_blk_put crc32_le mutex_lock warn_slowpath_null console_lock mmc_set_data_timeout mmc_blk_reset printk __mutex_init dev_err comp_rdev memset system_serial_init __memzero misc_register wait_for_completion mmc_wait_for_req drm_check nonseekable_open drm_get_data drm_cmd_fixup system_serial_high mmc_blk_part_switch mutex_unlock mmc_put_card __get_user_4 mmc_blk_emmc_add mmc_blk_get drm_cmd_seq drm_refresh_data __aeabi_unwind_cpp_pr1 __copy_to_user __copy_from_user mmc_blk_reset_success msleep __kmalloc kmalloc_caches
发现一段字符串是 ret %d
跟日志打印吻合,ret 1024,为了查找这个原始打印也废了很大劲
[ 2.456978] sensor_init: Probe name sensors [ 2.456995] sensor-dev.c v1.4 add angle calculation support between two gsensors 2013-09-01 [ 2.457525] rtc_hym8563 0-0051: setting system clock to 2011-01-01 12:14:58 UTC (1293884098) [ 2.463556] rockchip-spdif-card rockchip-spdif-card.25: rk-hdmi-spdif-hifi <-> ff880000.rockchip-spdif mapping ok [ 2.464517] ret 1024 [ 2.464896] usbcore: registered new interface driver snd-usb-audio [ 2.464903] ALSA device list: [ 2.464908] #0: RK_ES8323 [ 2.464912] #1: RK-SPDIF-CARD
我们可以根据里边的函数名称,去找kernel中哪些文件使用过这些函数,并去git还原老版本,估计关联很多。
未解决。。。。。。。。
待续
先暴力恢复老版本,等以后有空了再适配
git reset --hard f5535b6cbc2264aacf9927a95490ae10b00c4fb7
重新编译烧录就可以正常启动android
但还是有几点疑惑:
1. 为什么其他型号的rk3288烧录最新系统会卡在内核驱动初始化,天启自己的rk3288w 1650批次的没问题,但是其他rk3288w 1652 等以后生产的都不行
2. 为什么出问题系统都会卡在这里drm_misc_init,kernel/drivers/char/virtd这个文件到底是为了优化什么功能的,为什么天启不提供源文件,国内都是这样的开源?