linux memblock 初始化簡介

2021-09-02 10:54:04 字數 1375 閱讀 8081

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...