setup_machine_fdt(__fdt_pointer);
=>early_init_dt_scan() =>early_init_dt_scan_nodes()
=>//從dts中獲取 記憶體容量,位址資訊
/* setup memory, calling early_init_dt_add_memory_arch */
of_scan_flat_dt(early_init_dt_scan_memory, null);
arm64_memblock_init
詳細分析見部落格《memblock 初始化簡介》
initrd 與initramfs
initrd即 init ramdisk,是一種用ram模擬disk裝置的根檔案系統存放方式。需要制定格式和大小。
啟動引數需要類似於 initrd=0x31000000,0x200000 root=/dev/ram rw init=/linuxrc 這樣的啟動引數。
利用initrd核心在啟動階段可以順利的載入裝置驅動程式,然而initrd存在以下缺點:
initramfs
make menuconfig中配置以下選項就可以了:
general setup --->
[*] initial ram filesystem and ram disk (initramfs/initrd) support
(../rootfs_dir/) initramfs source file(s)
initramfs方式使得編譯出的核心就包含了rootfs,在vmlinux elf中作為乙個段存在。
#ifdef config_blk_dev_initrd
#define init_ram_fs \
. = align(4); \
vmlinux_symbol(__initramfs_start) = .; \
keep(*(.init.ramfs)) \
. = align(8); \
keep(*(.init.ramfs.info))
#else
#define init_ram_fs
#endif
1. initrd的位置獲取:掃瞄位於chosen節點的 linux,initrd-start 和 linux,initrd-end
early_init_dt_check_for_initrd(node);
2. initramfs位置位於鏈結指令碼中,編譯時確定
《linux核心ramdisk(initrd)機制》
初始化 指定初始化
id alloc 物件的誕生過程,主要是從作業系統獲得一塊足夠大的記憶體,以存放該類的全部例項變數,並將其指定為存放記憶體物件的實力變數的位置。alloc方法同時將這塊記憶體全部設定為0。結果是 bool變數初始化為no,所有的int型別變數為0,float變數為0.0,所有的指標為nil.obje...
初始化 1 預設初始化 列表初始化
初始化的基本概念 事實 初始化和賦值是兩個完全不同的操作。初始化,是建立變數時賦予其乙個初始值。賦值,是把物件的當前值擦除,用乙個新值代替。列表初始化 p39 作為c 11新標準的一部分,用花括號 來初始化變數得到了全面應用。出於某些原因,這種初始化的方式叫做列表初始化。現在,無論是初始化物件還是某...
初始化 MyBatis初始化之載入初始化
在mybatis初始化過程中,大致會有以下幾個步驟 1.建立configuration全域性配置物件,會往typealiasregistry別名註冊中心新增mybatis需要用到的相關類,並設定預設的語言驅動類為xmllanguagedriver 3.構建defaultsqlsessionfacto...