日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

linux kernel内存管理学习篇

發(fā)布時(shí)間:2025/3/21 linux 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux kernel内存管理学习篇 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

      • 1、DDR的注冊(cè)
        • (1)、在dts中定義了DDR(memory)的范圍
        • (2)、將DDR地址范圍注冊(cè)到linux kernel
      • 2、reserved-memory的注冊(cè)
        • (1)、在dts中定義了reserved-memory的范圍
        • (2)、將reserved memory信息告知給linux kernel


★★★ 友情鏈接 : 個(gè)人博客導(dǎo)讀首頁(yè)—點(diǎn)擊此處 ★★★

1、DDR的注冊(cè)

(1)、在dts中定義了DDR(memory)的范圍

memory@0 {device_type = "memory";reg = <0x0 0x80000000 0x2 0x0>; };

(2)、將DDR地址范圍注冊(cè)到linux kernel

early_init_dt_scan_memory()
early_init_dt_scan_memory() —> early_init_dt_add_memory_arch(base, size) —> memblock_add(base, size)—>memblock_add_region(base, size, MAX_NUMNODES, 0)

(driver/of/fdt.c) /*** early_init_dt_scan_memory - Look for an parse memory nodes*/ int __init early_init_dt_scan_memory(unsigned long node, const char *uname,int depth, void *data) {const char *type = of_get_flat_dt_prop(node, "device_type", NULL);const __be32 *reg, *endp;int l;/* We are scanning "memory" nodes only */if (type == NULL) {/** The longtrail doesn't have a device_type on the* /memory node, so look for the node called /memory@0.*/if (!IS_ENABLED(CONFIG_PPC32) || depth != 1 || strcmp(uname, "memory@0") != 0)return 0;} else if (strcmp(type, "memory") != 0)return 0;reg = of_get_flat_dt_prop(node, "linux,usable-memory", &l);if (reg == NULL)reg = of_get_flat_dt_prop(node, "reg", &l);if (reg == NULL)return 0;endp = reg + (l / sizeof(__be32));pr_debug("memory scan node %s, reg size %d,\n", uname, l);while ((endp - reg) >= (dt_root_addr_cells + dt_root_size_cells)) {u64 base, size;base = dt_mem_next_cell(dt_root_addr_cells, &reg);size = dt_mem_next_cell(dt_root_size_cells, &reg);if (size == 0)continue;pr_debug(" - %llx , %llx\n", (unsigned long long)base,(unsigned long long)size);early_init_dt_add_memory_arch(base, size);}return 0; }

MAX_NUMNODES表示有幾塊DDR區(qū)域(注意是幾塊DDR區(qū)域,并不是幾塊DDR),大小為1(1<<0)或和CONFIG_NODES_SHIFT值相關(guān)

#define MAX_NUMNODES (1 << NODES_SHIFT)#ifdef CONFIG_NODES_SHIFT #define NODES_SHIFT CONFIG_NODES_SHIFT #else #define NODES_SHIFT 0 #endif

2、reserved-memory的注冊(cè)

(1)、在dts中定義了reserved-memory的范圍

reserved-memory {#address-cells = <1>;#size-cells = <1>;ranges;/* global autoconfigured region for contiguous allocations */linux,cma {compatible = "shared-dma-pool";reusable;size = <0x4000000>;alignment = <0x2000>;linux,cma-default;};display_reserved: framebuffer@78000000 {reg = <0x78000000 0x800000>;};multimedia_reserved: multimedia@77000000 {compatible = "acme,multimedia-memory";reg = <0x77000000 0x4000000>;};};/* ... */fb0: video@12300000 {memory-region = <&display_reserved>;/* ... */};scaler: scaler@12500000 {memory-region = <&multimedia_reserved>;/* ... */};codec: codec@12600000 {memory-region = <&multimedia_reserved>;/* ... */};

(2)、將reserved memory信息告知給linux kernel

__fdt_scan_reserved_mem()
__fdt_scan_reserved_mem() —> __reserved_mem_reserve_reg() —> early_init_dt_reserve_memory_arch(base, size, nomap)—>memblock_reserve(base, size) —> memblock_reserve_region(base, size, MAX_NUMNODES, 0)

(driver/of/fdt.c) /*** fdt_scan_reserved_mem() - scan a single FDT node for reserved memory*/ static int __init __fdt_scan_reserved_mem(unsigned long node, const char *uname,int depth, void *data) {static int found;const char *status;int err;if (!found && depth == 1 && strcmp(uname, "reserved-memory") == 0) {if (__reserved_mem_check_root(node) != 0) {pr_err("Reserved memory: unsupported node format, ignoring\n");/* break scan */return 1;}found = 1;/* scan next node */return 0;} else if (!found) {/* scan next node */return 0;} else if (found && depth < 2) {/* scanning of /reserved-memory has been finished */return 1;}status = of_get_flat_dt_prop(node, "status", NULL);if (status && strcmp(status, "okay") != 0 && strcmp(status, "ok") != 0)return 0;err = __reserved_mem_reserve_reg(node, uname);if (err == -ENOENT && of_get_flat_dt_prop(node, "size", NULL))fdt_reserved_mem_save_node(node, uname, 0, 0);/* scan next node */return 0; }

總結(jié)

以上是生活随笔為你收集整理的linux kernel内存管理学习篇的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩激情 | 色哟哟入口| 国产高清在线精品 | 亚洲激情欧美色图 | 国产在线拍揄自揄拍无码视频 | 欧美aa视频 | 国产精品三级在线 | 中文字幕视频在线观看 | 欧美福利一区二区三区 | 成人午夜性视频 | 欧美大片视频在线观看 | a视频免费观看 | 黄色动漫免费在线观看 | 国产午夜精品久久久久久久 | 97九色| 欧美a v在线 | 淫欲av | yjizz国产 | 天天干天天舔天天操 | 日韩网站免费 | 国产三级三级看三级 | 黄色免费毛片 | 大乳女喂男人吃奶视频 | 日韩av在线一区二区 | 亚洲综合国产 | 久久久电影| 亚洲四区在线 | 香蕉视频免费网站 | 深田咏美中文字幕 | 一级特黄aaa | 美女久久久久久久久久 | 亚洲а∨天堂久久精品2021 | 性欧美视频在线观看 | 中文字幕有码在线播放 | 致命弯道8在线观看免费高清完整 | av全黄 | 黄色网址在线视频 | 免费一级欧美片在线播放 | 99草视频 | 国产18在线观看 | 欧美亚洲黄色片 | 伊人色在线 | 在线观看黄色网页 | 99re6在线精品视频免费播放 | 国产精品扒开腿做爽爽爽视频 | 国产乱国产乱老熟 | 热久久亚洲 | 又黄又爽的免费视频 | 日韩亚洲欧美中文字幕 | 不卡一区二区在线视频 | 黑人极品ⅴideos精品欧美棵 | 一本大道久久a久久综合婷婷 | 亚洲精品日日夜夜 | 龚玥菲一级淫片 | 日本不卡中文字幕 | 黄色网页免费 | 亚洲日本欧美精品 | 91嫩草精品 | 97福利视频 | 探花av在线 | 色爽 | 国产精选av | 久久理论片 | 日日淫 | 秋霞成人午夜鲁丝一区二区三区 | 老司机在线永久免费观看 | 成人在线影片 | 51热门大瓜今日大瓜 | 伊人成人22 | 在线一区二区三区四区 | 欧美日韩国产一区二区三区在线观看 | 免费看片网站91 | 久久发布国产伦子伦精品 | 欧美日韩国产高清 | 蜜臀久久99精品久久久久久 | 国产看黄网站 | 欧美熟妇毛茸茸 | 羞羞涩| 91动态图| 欧美精品免费一区二区 | 久久久88 | 国产美女免费视频 | 欧美三级欧美一级 | 天天躁日日躁狠狠躁av麻豆男男 | 国产麻豆精品在线观看 | 国产麻豆成人传媒免费观看 | 一级草逼片 | 精品一区日韩 | 亚洲一区二区图片 | 亲嘴扒胸摸屁股激烈网站 | 国产高潮流白浆喷水视频 | 波多野结衣在线观看一区二区 | 中文综合网 | 性淫bbwbbwbbw| 91人妻一区二区 | 久久sese| 全部孕妇毛片丰满孕妇孕交 | 亚洲国产网站 | 欧美人成在线视频 |