arm linux启动 arm架构linux
老铁们,大家好,相信还有很多朋友对于arm linux启动和arm架构linux的相关问题不太懂,没关系,今天就由我来为大家分享分享arm linux启动以及arm架构linux的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!
Linux启动过程与级别,以ARM-RK3566开发板系统为例
Linux启动过程与级别详解,以ARM-RK3566开发板系统为例。
Linux启动流程分为三个关键步骤:BootLoader-> kernel-> RootFilesystem。系统启动后,BootLoader执行内核加载,随后内核初始化硬件与驱动,调用init程序。init程序根据/etc/inittab文件决定默认运行级别,执行/etc/init.d/rc脚本,按顺序启动指定级别下的服务。
系统级别的对应如下:
runlevel 0:系统停机状态,运行级别不能设为0,否则不能正常启动。
runlevel 1:单用户工作模式,root权限,用于系统维护,禁止远程登录。
runlevel 2:多用户工作模式(但不支持NFS),命令行模式登陆。
runlevel 3:完全多用户工作模式(有NFS),命令行模式登陆。
runlevel 4:未使用的系统模式,保留。
runlevel 5: X11图形模式,登陆后进入图形GUI模式。
runlevel 6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动。
内核启动过程包含以下步骤:
1.初始化硬件与驱动。
2.调用init程序。
3. init程序读取/etc/inittab文件决定运行级别。
4.执行/etc/init.d/rc脚本,参数为运行级别。
5.按顺序执行对应级别的服务脚本。
重启或关机时,系统根据指令切换运行级别,执行对应脚本关闭服务。
传统Init启动系统采用SysV init进程处理启动过程,被认为效率较低。systemd系统启动方式旨在减少引导时间和计算开销,提供更高效的服务控制。
使用ln命令设置运行级别,创建链接文件到默认target。systemd启动默认启动graphical.target或multi-user.target,启动顺序遵循依赖规则。
通过查看default.target配置,了解启动服务的描述、文档位置、依赖关系等信息。允许isolate命令切换到指定服务,实现更精细的启动控制。
systemd启动流程为:启动默认target,递归处理依赖关系,从multi-user.target开始,逐步启动其他服务。
请问armlinux在启动过程中是先加载驱动还是先挂载文件系统
Linux内核一般都会在RAM中运行,所以在调用Linux内核之前bootloader必须设置和初始化RAM,上电或复位后从flash读取bootloader,通过bootloader初始化RAM,初始化串口,检测处理器类型,设置Linux启动参数,调用Linux内核映像。在bootloader将Linux内核映像拷贝到RAM以后,可以通过下例代码启动Linux内核:call_linux(0,machine_type,kernel_params_base)。machine_tpye是检测出的处理器类型,kernel_params_base是启动参数在RAM的地址。建议阅读linux相关书籍比如说《linux就该这么学》。
numalinuxarm启动cpunumalinux
如何关闭linuxnuma?
crontab-e删掉你要退出的命令就可以了
numa节点是不是物理cpu?
numa是一种关于多个cpu如何访问内存的架构模型,现在的cpu基本都是numa架构,linux内核2.5开始支持numa。
numa架构简单点儿说就是,一个物理cpu(一般包含多个逻辑cpu或者说多个核心)构成一个node,这个node不仅包括cpu,还包括一组内存插槽,也就是说一个物理cpu以及一块内存构成了一个node。每个cpu可以访问自己node下的内存,也可以访问其他node的内存,但是访问速度是不一样的,自己node下的更快。numactl--hardware命令可以查看node状况。
通过numactl启动程序,可以指定node绑定规则和内存使用规则。可以通过cpunodebind参数使进程使用固定node上的cpu,使用localalloc参数指定进程只使用cpu所在node上分配的内存。如果分配的node上的内存足够用,这样可以减少抖动,提供性能。如果内存紧张,则应该使用interleave参数,否则进程会因为只能使用部分内存而outofmemory或者使用swap区造成性能下降。
NUMA的内存分配策略有localalloc、preferred、membind、interleave。
localalloc规定进程从当前node上请求分配内存;
preferred比较宽松地指定了一个推荐的node来获取内存,如果被推荐的node上没有足够内存,进程可以尝试别的node。
membind可以指定若干个node,进程只能从这些指定的node上请求分配内存。
interleave规定进程从指定的若干个node上以RR(RoundRobin轮询调度)算法交织地请求分配内存。
linux怎么管理空闲内存?
内存组织层次:页式管理—>(numa)—>node的zonelist—>32位DMA/NORMAL/HIGHMEM三个区,64位没有高端内存—>伙伴分配系统—>slab/slub/slob2.创建进程时内存分配:实际上只分配task_struct和thread_info的内存,而且很可能是从slab缓存中分配的,当进程运行时由于缺页中断,才由内核层具体分配物理内存并与vm挂接3.malloc是cruntime中的实现,是上层库的内存分配层,至于内核层的,可以看看__alloc_pages/alloc_pages/kmalloc(小内存直接slab,大内存还是alloc_pages)/vmalloc(alloc_page分配不连续的物理页,映射到连续的vm_struct中的pages指针数组)/vmap/map_vm_area等几个函数