linux系统相关知识
文章平均质量分 66
记录内核相关学习笔记,摘录重要知识汇总
45°的阳光
虽然你变秃了,但是你变强了
展开
-
内核数据结构
内容参考摘录自 《Linux内核设计与实现 第三版》Linux内核实现了一些通用数据结构,且提倡开发时重用。一、链表链表是Linux内核中最简单、最普通的数据结构。链表是一种存放和操作都可变数量元素的数据结构。链表和静态数组的不同之处在于,它所包含的元素都是动态创建并插入链表的,在编译时不必知道具体需要创建多少个元素。1Linux内核中实现链表代码在头文件<linux/list.h>中声明//双向链表struct dl_list { struct dl_list *next;原创 2021-03-03 17:55:03 · 320 阅读 · 1 评论 -
系统调用
概念在操作系统中内核提供了用户进程与内核进行交互的一组接口。这些接口让应用程序受限的访问硬件设备,提供了创建新进程并与已有进程进行通信的机制,也提供了申请操作系统其它资源的能力。这些接口在应用程序和内核之间扮演了角色,应用程序发出各种请求,...原创 2021-03-03 15:07:38 · 447 阅读 · 1 评论 -
抢占和上下文切换
一、上下文切换上下文切换,也就是从一个可执行进程切换到另一个可执行进程,由函数context_switch()函数负责处理。每当一个新的进程被选择出来准备投入运行的时候,schedule()就会调用该函数。完成两项基本工作。**·**调用switch_mm(),把虚拟内存从一个进程映射切换到新进程中· 调用switch_to(),从上一个进程的处理器状态切换到新进程的处理器状态。<包括保存、恢复栈信息和寄存器信息>因为内核必须知道在什么时候调用schedule()。如果仅靠用户程序代码原创 2021-02-24 16:40:55 · 183 阅读 · 0 评论 -
进程调度的实现
内容参考摘录自 《Linux内核设计与实现 第三版》CFS调度实现的相关代码位于/kernel/sched/fair.c中,接下来重点关注4个部分时间记账进程选择调度器入口睡眠和唤醒一、时间记账所有的调度都必须对进程运行做时间记账。当每次系统时钟节拍发生时,时间片都会被减少一个节拍周期。当一个进程的时间片被减少到0时,它就会被另一个尚未减到0的时间片可运行进程抢占。1.调度器实体结构CFS不再有时间片的概念,但是它也必须维护每个进程运行的时间记账,因为它需要确保每个进程只在公平分配给原创 2021-02-24 14:17:04 · 558 阅读 · 0 评论 -
进程调度——Linux
【摘录自Linux内核设计】进程调度程序进程调度程序负责决定将那个程序投入运行,何时运行以及运行多长时间。进程调度程序可看做在可运行状态进程之间分配有限的处理器时间资源的内核子系统。调度程序没有太复杂的原理。最大限度的利用处理器时间的原则是,只要有可以执行的进程,那么就总会有进程正在执行。但是只要系统中可运行的进程数目比处理器个数多,就注定某一时刻就会有一些进程不能执行。这些进程在等待运行。在一组处于可运行态的进程中选择一个来执行,是调度程序所需完成的基本工作。一、多任务1.多任务操作系统多任务操原创 2021-02-02 16:17:55 · 259 阅读 · 0 评论 -
什么是内核——linux内核解析
【本文内容参考自Linux内核设计与实现,仅作笔记】一、内核介绍1.什么是内核 用户操作的界面是操作系统的外在表象,内核才是操作系统的内在核心。系统其它部分必须依靠内核这部分软件提供的服务,像管理硬件设备、分配系统资源等。 通常内核由负责响应中断服务程序、负责管理多个进程从而分享处理时间的调度程序、负责管理进程地址空间的内存管理程序和网络、进程间通信等系统服务程序共同组成。 对于提供保护机制的现代系统来说,内核独立于普通应用程序,它一般处于系统态,拥有受保护的内存空间和访问硬件设备的所有权限原创 2021-01-29 16:30:11 · 3112 阅读 · 0 评论 -
linux内核目录分析
内核源代码目录结构1.arch目录:包含硬件体系结构相关的代码,每种平台占一个目录,如arm、mips、x86等,截图如下2.block目录:块设备驱动程序IO调度3.crypto目录:存放一些常用算法4.Documentation目录:内核的各个部分的注释5.drivers目录:设备驱动程序6.fs目录:支持的各种不同的文件系统7.include目录:存放头文件的目录8.init目录:内核初试化代码9.ipc目录:进程间通信的代码10.kernel目录:内核核心部分原创 2020-08-02 21:04:56 · 220 阅读 · 0 评论 -
Linux下交叉编译链安装过程
1.将交叉编译链拷贝或下载到电脑上,这里用的mips的交叉编译链2.添加环境变量sudo vim /etc/bash.bashrc最后一行添加编译链路径:export PATH=$PATH:/home/bxn/mips-gcc720-glibc226/bin/3.重新加载脚本,将修改后的bash.bashrc加到系统中去source /etc/bash.bashrc4.测试交叉编译链有无安装好mips-linux-gnu-gcc -v如下图显示,表示已经安装成功...原创 2020-09-06 14:19:34 · 738 阅读 · 0 评论 -
menuconfig内核配置过程
Menuconfig与Kconfig关系一、menuconfig图示make menuconfig 进入配置菜单(以博通网卡驱动为例)1.进入驱动菜单栏下2.选择进入网络驱动菜单栏下3.选择进入无线网卡菜单栏4.选择博通bcm43455(按Y,选择编译到内核–*号代表选中,按N-*号消失,表示不编译到内核)二、Kconfig1.cd到图示路径,箭头1-4分别对应菜单栏四级选项2.Kconfig中对应代码编写三、Kcongfig的构成1.tristate:选项名2.-----help--原创 2020-07-07 18:24:43 · 3628 阅读 · 2 评论 -
linux-kernel编译过程——mips平台示例
一、选板级1.扳级目录:arch/mips/configs (arch/平台/configs)2.将选定的扳级复制到.config中cp halley5_v20_linux_sfc_nand_defconfig /home/bxn/kernel-4.4.94/.config3.进入menuconfig界面报存对.config的配置make menuconfig4.make编译make ARCH=mips CROSS_COMPILE=mips-linux-gnu-或者修改Makefile中的AR原创 2020-09-09 18:16:46 · 889 阅读 · 0 评论 -
编译生成uImage过程——mips平台
在使用tftp移植过程中,tftp移植的镜像格式uImage,在使用厂家提供的kernel编译时,直接make 生成uImage是行不通的一、uImage和zImage的区别zImage是Linux常用的一种压缩映像文件,uImage是U-boot专用的映像文件,uImage是在zImage之前加上一个长度为0x40的“头”,说明这个映像文件的类型、加载位置、生成时间、大小等信息。如果直接从uImage的0x40位置开始执行,zImage和uImage没有任何区别。uImage通过compressed原创 2020-09-02 19:02:09 · 1077 阅读 · 1 评论 -
buildroot制作文件系统流程记录
一、buildroot安装做开发时最好使用厂家提供的buildroot官方网址:https://buildroot.org/1.什么是buildroot?官方指导文档 Buildroot是一种工具,它可以简化并自动化为嵌入式系统构建完整的Linux系统的过程交叉编译。为了实现这一点,Buildroot能够生成一个交叉编译工具链、一个根文件系统、一个Linux内核映像和一个目标的引导加载程序。下载安装完成buildroot要做如下操作Linux系统:curl -O https://bu原创 2020-09-14 14:01:19 · 1008 阅读 · 1 评论 -
tftp使用总结
一、电脑端安装tftp1.sudo apt-get install tftp-hpa tftpd-hpa下载tftp2.配置tftpsudo vim /etc/default/tftpd-hpa如下图配置配置完之后创建tftp-server的目录/ftfpboot,创建完之后用sudo chmod 777 tftpboot为文件附加权限3.查看tftp是否安装好,如下图证明安装成功4.配置电脑端ip,因为开发板与电脑是通过网线连接,所以我们需要手动指定一个静态ip给电脑查看ip变为手动原创 2020-09-01 19:09:44 · 777 阅读 · 0 评论 -
Linux下nfs挂载根文件系统
1.检查nfs有无安装service nfs-kernel-server上图表示已经安装过,如未安装sudo apt-get install nfs-kernel-server2.配置/etc/exports文件1>创建共享文件目录sudo mkdir /source/rootfs2>权限赋予sudo chmod 777 /source/rootfs/3>配置exports文件4>修改后重启nfs服务/etc/init.d/nfs-kernel-server rest原创 2020-09-06 15:26:51 · 536 阅读 · 0 评论 -
uboot编译过程
在编译uboot之前先确定交叉编译链已经安装好,针对不同的开发板,uboot的配置也不同,可以cat boards.cfg,查看不同板子的信息1.编译步骤1->make distclean2->make [板子的名字],这里以君正x2000为例子到这里uboot就编译好了,将红框的bin文件烧录到开发板即可...原创 2020-09-03 18:24:49 · 802 阅读 · 0 评论 -
mount: mounting /dev/mmcblk0 on /mnt failed: Invalid argument
1.mount 挂载sd卡失败总结挂载名错误,误把节点名当分区挂载正确:mount /dev/mmcblk0p1 /mnt原创 2020-09-09 14:39:32 · 13143 阅读 · 1 评论