ARM平台linux内核Notes 1

发布者:梦幻微笑最新更新时间:2024-09-03 来源: cnblogs关键字:ARM平台  linux内核  存储空间 手机看文章 扫描二维码
随时随地手机看文章


  现代处理器通常至少有4个RAM片选管脚,每个管脚所连RAM芯片在系统总的起始地址和大小可以通过寄存器设置。


  对应内存bank的数据结构有struct meminfo:


struct meminfo {

        int nr_banks;

        struct membank bank[NR_BANKS];

};

 


内存节点(node)


  内存节点是指由一个或者多个内存bank组成的内存集合,如果一个内存节点由多个内存bank组成,这些内存bank之间可以连续也可以不连续,即节点内可以存在内存孔洞。


  在设置中


CONFIG_DISCONTIGMEM

/*

未设置,则只有一个bank,即只有一个内存node,内存地址连续;

处理器地址寻址间每两个RAM的地址范围固定,若接入的RAM小于这个最大寻址范围,将出现内存孔洞。此时,若不设置CONFIG_DISCONTIGMEM,所有内存bank都属于内存节点0,如果设置了CONFIG_DISCONTIGMEM,将浪费一定的时间为孔洞内存创建struct page。

孔洞对系统启动后无影响,因为孔洞已经被mem_init()回收。

*/


对应内存节点的重要数据结构有 struct pglist_data(pg_data_t):


typedef struct pglist_data {

        struct zone node_zones[MAX_NR_ZONES];

        struct zonelist node_zonelists[MAX_ZONELISTS];

        int nr_zones;

#ifdef CONFIG_FLAT_NODE_MEM_MAP /* means !SPARSEMEM */

        struct page *node_mem_map;

#ifdef CONFIG_CGROUP_MEM_RES_CTLR

        struct page_cgroup *node_page_cgroup;

#endif

#endif

#ifndef CONFIG_NO_BOOTMEM

        struct bootmem_data *bdata;

#endif

#ifdef CONFIG_MEMORY_HOTPLUG

        /*

         * Must be held any time you expect node_start_pfn, node_present_pages

         * or node_spanned_pages stay constant.  Holding this will also

         * guarantee that any pfn_valid() stays that way.

         *

         * Nests above zone->lock and zone->size_seqlock.

         */

        spinlock_t node_size_lock;

#endif

        unsigned long node_start_pfn;

        unsigned long node_present_pages; /* total number of physical pages */

        unsigned long node_spanned_pages; /* total size of physical page

                                             range, including holes */

        int node_id;

        wait_queue_head_t kswapd_wait;

        struct task_struct *kswapd;

        int kswapd_max_order;

} pg_data_t;


内存页区(zone)


  内存页区是定义在内存节点(node)中的概念,每个内存节点可以分成3个内存页区,即


  1、DMA页区(ZONE_DMA=0):可DMA操作


  2、Normal页区(ZONE_NORMAL=1):禁止DMA操作


  3、HighMem页区(ZONE_HIGHMEM=2):高端内存区域


  对应内存页区的重要数据结构有struct zone(内容比较长,就不粘贴了~、~,上LXR自己找找呗)


 


空闲内存区域(free area)


  空闲内存区域是内存页区内连续2^N页空闲内存组成的内存区域,其中N的范围在0~MAX_ORDER-1之间的整数,MAX_ORDER默认为11.


  对应的数据结构有struct free_area:


struct free_area {

        struct list_head        free_list[MIGRATE_TYPES];

        unsigned long           nr_free;

};

 


[1] [2]
关键字:ARM平台  linux内核  存储空间 引用地址:ARM平台linux内核Notes 1

上一篇:ARM平台linux内核Notes 2
下一篇:s3c6410裸机程序(2)

推荐阅读最新更新时间:2024-11-05 07:20

基于ARM的毫米波天线自动对准平台设计
在毫米波中继通信设备中,为提高对准精度,缩短对准时间,满足快速反应的要求,并结合毫米波波瓣窄,方向性强的特点,创造性地提出了毫米波天线自动对准平台系统的设计方案。在天线对准过程中,将复杂的的空间搜索转换成两个简单的水平和垂直搜索,简化了搜索控制算法。采用基于ARM 的32 位微处理器LPC2294 进行控制,用步进电机驱动平台和毫米波设备转动,实现毫米波通信设备的快速准确对准。毫米波中继通信设备在国内还处于研发改进阶段,所以该对准平台系统具有极大的参考意义。 毫米波作为一项尖端学科在中继通信方面发挥着越来越重要的作用。但毫米波波瓣窄,方向性强,导致天线对准困难,存在对通时间长,甚至难以对准的问题,不能满足快速反应的要求。因此,
[网络通信]
三星将优化软件提升Galaxy S4存储空间
新浪科技讯 北京时间5月17日凌晨消息,三星发言人在接受科技媒体Cnet UK采访时称,三星将通过优化软件来解决16GB版Galaxy S4存储空间不足的问题。   三星最新发布的16GB版Galaxy S4因存储空间不足问题受到质疑。用户反映,该机型可用的存储空间不到9GB。   三星发言人表示:“我们已经注意到这个问题,并将努力通过优化软件来提升存储空间。聆听用户的意见,并尽最大努力满足用户需求,是三星在创新过程中不可或缺的一部分。”   三星此前曾对该问题作出回应,称存储不足是因为三星要给用户提供“更丰富的功能”。为满足用户的存储需求,Galaxy S4上提供SD卡槽,用户可以进行容量扩展。然而,该容量仅限于储存音乐、
[手机便携]
PPP拨号在ARM2410平台上的移植
本次PPP移植是在三星arm2410的平台上进行的,所用的工作环境为: Kernel: 2.4.18 Sysvinit:2.86 Tinylogin:1.4 Glibc: 2.2.5 CC:3.3 PPP: 2.4.1 U-boot:1.1.3 一、具体操作步骤 首先编译内核支持 PPP: $make menuconfig l $make ARCH=arm CROSS_COMPILE=/../arm-linux- zImage $./mkimage2410 uImage 其中mkimage2410文件来自u-boot1.1.1 需要根据你的路径修改mkimage2410的内容,指定mkimage文件的位置。 第二步,制作文件系
[单片机]
s3c2440移植Linux内核,移植Linux-3.4.2内核到S3C2440
一、BootLoader引导内核过程 1、Bootloader的工作 1.1、将内核读入内存 1.2、保存内核启动参数到指定位置,内核启动时去这个位置解析参数 1.3、启动内核、传入机器ID 二、内核的启动流程 内核首要目的是挂载根文件系统,启动应用程序,内核启动的过程大致为以下几步: 1.检查CPU和机器类型 2.进行堆栈、MMU等其他程序运行关键的东西进行初始化 3.打印内核信息 4.执行各种模块的初始化 5.挂接根文件系统 6.启动第一个init进程 对于ARM的处理器,内核第一个启动的文件是arc/arm/kernel下面的head.S文件 第一阶段: 首先截取部分head.S文件 ENTRY(stext) THUMB
[单片机]
ARM 平台printf函数定位到uart输出介绍
1.1 ARM 串口输出函数uart_printf ARM如果能使用C函数库自带的printf函数格式输出,那多方便,但是默认的printf都是定位到stdout终端,而不是串口,本文章讲述的是如何定位到ARM的串口。 1.1.1 函数主要代码 有在Mini2440开发板上验证过 //*****************main.c******************************* #include serial.h int Main() { unsignedint plck_val = 50000000; unsignedint buad_val = 115200; un
[单片机]
iptables1.4.12.1移植到arm平台
平台介绍:主机端 ubuntu11.04 开发板内核 linux-2.6.30 iptables版本 1.4.12.1 移植过程: 内核需要对iptables的支持并加上nat功能 Networking support --- Networking options --- Network packet filtering framework (Netfilter) │ │ --- Network packet filtering framework (Netfilter) │ │ │ │ Network packet fi
[单片机]
net-snmp移植到ARM平台
主机环境 Windows + vmware(redhat9.0) IP分配如下: ARM开发板:192.168.4.151 Windows: 192.168.4.44 Redhat9.0: 192.168.4.150 搭建交叉编译环境 把交叉编译器解压到/opt/目录下,然后在/etc/profile文件中添加 环境变量,pathmunge /opt/hardhat/devkit/arm/xscale_be/bin. 交叉编译步骤 ①. tar zxvf net-snmp-5.3.2.tar.gz ②. cd net-snmp-5.3.2 ③../configure --host=
[单片机]
基于tiny4412的Linux内核移植(支持device tree)(二)
平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本:Linux-4.4.0 (支持device tree) u-boot版本:友善之臂自带的 U-Boot 2010.12 (为支持uImage启动,做了少许改动) busybox版本:busybox 1.25 交叉编译工具链: arm-none-linux-gnueabi-gcc (gcc version 4.8.3 20140320 (prerelease) (Sourcery CodeBench Lite 2014.05-29)) 步骤 继续上文。 由于Linux-4.4.0对tiny4412已经有了很好的支持,所以留给我
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多往期活动

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved