linux内核中socket的创建过程源码分析(总结性质)
在漫长地分析完socket的创建源码后,发现一片浆糊,所以特此总结,我的博客中同时有另外一篇详细的源码分析,内核版本为3.9,建议在阅读本文后若还有兴趣再去看另外一篇博文。绝对不要单独看另外一篇。一:调用链:二:数据结构一一看一下每个数据结构的意义:1) socket, sock, inet_soc...
linux内核虚拟内存之slub分配器
上一章主要讲述以页为最小单位进行内存分配的伙伴管理算法,较大程度上避免了内存碎片问题。而实际上对内存的申请却不是每次都申请一个页面的(比如文件节点,任务描述符等结构体内存),通常是远小于一个内存页面的大小,此外更可能会频繁地申请释放这些内存。对于这种情况,每次分配小于一个页面的都统一分配一个页面的空...
使用VMware Workstation安装(Linux内核)银河麒麟系统
1.下载软件:VMware Workstation Kylin-x86_64.iso(Linux内核)银河麒麟系统镜像包。2.安装完成VMware Workstation并运行。3.创建新的虚拟机。 4.选中“典型”,下一步。 5.安装程序光盘映像文件(浏览——文件存放路径),下一步。 6.虚拟机中...
linux1.0内核代码学习(五) 之保护模式编程
linux1.0内核是压缩的zImage映像文件,其内部格式组织如下: 其启动各个阶段在内存中的位置如下: 下图是指zboot/zSystem中程序调用自带的解压缩程序,将tools/zSystem解压到0x100000的内存地址处,并跳转到0x100000处执行boot/head.s程序。这个阶段...
Linux Kernel Driver 之 mmap 机制 Linux 内核编程的分离思想
前言Linux 编程中,大多数的场景,数据的交换,不论读还是写都要经过两次数据拷贝过程:用户和内核,内核和硬件物理内存如果数据的访问量比较小,两次的数据拷贝对系统性能影响几乎可以忽略不计如果数据的访问比较大,两次的数据拷贝势必影响系统性能数据的操作的规律是源要不是用户或者硬件,目的要不是硬件或者用户...
Linux内核追踪[4.14] X86的5级页表管理
X86的4级页表已经能够管理48bit(256TB)的VA,以及64TB的PA。不过由于某些供应商发布了超过64T的超大物理内存,因此需要实现了一个5级页表特性来进行支持。 下面是原来4级页表的48bitVA地址空间,原先的X64芯片规定,高8位永远与第48bit(从0开...
Linux内核虚拟内存之页表管理
linux采用了一种同时适用于32位和64位系统的普通分页模型。对于像32位arm系统来说两级页表已经足够,但64位系统需要更多数量的分页级别。2.6.10版本以前,linux采用三级分页的模型,从2.6.11版本开始采用4级分页模型。4种页表如下:页全局目录(pgd)页上级目录(pud)页中间目录...
移动操作系统内核分析--Linux系统调用
一 、实验目的了解Linux系统调用的工作机制掌握Linux系统调用的实现方法二、 实验内容实现一个新的“Hello World”系统调用。验证系统调用创建一个用户程序来调用“Hello World”系统调用:将用户程序编译后,放入rootfs.img根文件系统中。启动qemu虚拟机,在虚拟...
ZYNQ-Linux学习笔记(8)- Petalinux .2 编译移植Marvell8801wifi内核模块
前言petalinux2018.2用的内核版本是4.14.0marvell8801给的驱动所依赖的内核版本是3.10.11由于内核的API在这两个版本上是有区别的,所以需要修改,其次还需要修改makefile。目录结构sd8801的驱动目录如下D:\DOWNLOADS\SD-UAPSTA-8801-...
如何在Linux应用层和内核层获取时间
【1】应用层gettimeofday函数头文件:#include <sys/time.h>int gettimeofday(struct timeval*tv, struct timezone *tz);其参数tv是保存获取时间结果的结构体,参数tz用于保存时区结果:struct tim...
linux内核库aio调研
linux内核库aio调研背景介绍两种头文件:5 个系统调用:(man手册)echo > /proc/sys/fs/aio-max-nr 1048576背景介绍图 1. 基本 Linux I/O 模型的简单矩阵两种头文件:原生的AIO_ABI方法 /usr/include/linux/aio_...
如何将自己写的驱动编译进linux内核镜像中
大家在做驱动开发时,通常都是将驱动源码编译为.ok文件,然后通过insmod 加载进系统中,那么如何能够实现在编译linux内核源码时,同时将驱动源码一同编译进镜像中呢?下面给出具体的方法和步骤1,在Linux内核源码的drivers目录下创建自己的驱动源码目录,这里我同时加入两个驱动,分别...
树莓派3b——linux内核更新
树莓派3b——linux内核更新闲来无事,试水写个博客,各位大神看看就好也希望能帮助到别人呗由于学习驱动编译需要,驱动模块所依赖的系统版本必须跟内核相同,然后更换内核得把驱动更新一遍所以,现在先编译一遍树莓派的内核吧平台版本ubuntu16.04、树莓派3b、4.4.21内核的jessie系统、4....
ZYNQ7000(AX7020)移植Linux操作系统(三):内核的编译
一、Linux内核介绍Linux是一个自由的、免费的,源码开放的操作系统。一些厂商将Linux系统内核与应用程序个文档包装起来,并提供一些安装界面和系统设定管理工具的一个软件包的集合,例如RedHat,Debian、Ubuntu、Novell/SuSE等。Ubuntu版本号由该次发布的年份和月份组成...
Linux 内核工具 iptables 配置TCP/UDP端口转发(命令参考)
1、配置TCP端口转发 把本机20000/TCP端口转发到7.7.7.7:20000 iptables -t nat -A PREROUTING -p tcp --dport 20000 -j DNAT --to-destination 7.7.7.7:20000 iptables -t nat -...
精通linux内核网络———第二章Netlink套接字之通用Netlink协议
## 通用Netlink协议要添加Netlink协议簇,需要在include/linux/netlink.h中添加协议簇定义。但通用Netlink协议不要求这样做。Netlink协议的一个缺点是,协议不能超过32(MAX_LINKS)个。通用Netlink协议以Netlink协议为基础,并使用其AP...
linux内核编译步骤(详细全过程)
本人新学,因此将每一步详细记录如下,望能够对大家有所帮助。环境: 电脑操作系统:ubuntu10.04 。 linux内核版本:linux-3.12.6内核源码下载地址:www.kernel.org我就按照步骤来,都是按照细小步骤来。1、打开终端,更改为root用户。输入命令su,再输入密码即可。2...
如何在Linux内核中设置打印日志时间戳
在编译Linux内核:make menuconfig ---> Kernel hacking -->printk and dmesg options--> show timing information on printks选上show timing information on ...
在Linux内核中打印日志时间戳
今天在和FPGA,联调过程中,需要测试脉冲信号。目的是为了测试两个中断之间的时间间隔。开启内核的打印时间在编译Linux内核:make menuconfig ---> Kernel hacking -->printk and dmesg options--> show timing...
VPP和Linux内核协议栈通信的方法
背景介绍 基于VPP开发一款网络设备,除使用VPP框架实现端口数据报文转发外,还需要对设备进行配置和管理,比较常用的是要实现ssh、web等相关服务,另外,由于VPP并未实现dhcp server的功能,控制面可能还需移植isc-dhcp类似的dhcp server。相关的用户态程序是基于Li...