operator-sdk流程分析 1.初始化logger// use zap logging cli options //set the controller-runtime logger opts := zap.Options{} //add the zap flagset to the operator’s command line flags opts.BindFlags(flag.CommandLine) //定义 监控暴露的端口 flag.StringVar(&metricsAddr, "metrics-.
宿主机和虚拟机可以ping通telnet不通问题排查 问题描述宿主机win10,虚拟机ubuntu20,可以互相ping通,在虚拟机起了一个数据库进程,端口号26257,从宿主机无法访问,telnet不通wireshark抓包分析后,发现错误提示信息:Destination unreachable (Host administratively prohibited)推断是防火墙问题。宿主机防火墙已经关闭,虚拟机需要关闭防火墙。解决办法关闭防火墙。sudo iptables -P INPUT ACCEPTsudo iptables -P FORWA
linux内核学习(3)-内存管理之虚拟内存管理 1.进程地址空间进程地址空间(Process Address Space) 指进程可以寻址的虚拟地址空间进程没有权限寻址内核空间的虚拟地址,只能通过系统调用间接访问用户空间的进程地址空间称为内存区域(memory area)。进程可以通过内核的内存管理机制动态地添加和删除这些内存区域,采用VMA数据结构来描述内存区域包含如下内容:a).代码段映射b).数据段映射c).用户进程的栈:用户空间的最高地址d)MMAP映射区域:mmap系统调用,如映射一个文件的内容到进程地址空间e).堆映射区域
linux内核学习(3)-内存管理之物理内存管理 1.物理页面物理内存管理的最小单位是页内核中使用struct page数据结构描述一个物理页面,简化后如下struct page{ unsigned long flags; //标志位集合 atomic_t _count; //内核中引用该页面的次数 atomic_t _mapcount; //内核中引用该页面的次数 unsigned long private; struct address_space *mapping pgoff_t index
Linux内核学习(3)-内存管理 1.分页机制虚拟内存通过CPU的硬件单元映射到物理内存中,物理内存也以页为单位进行管理,称为物理页面(Physical Page)或者页帧(Page Frame)。进程虚拟地址空间的页称为虚拟页(Virtual Page)操作系统为了管理这些页帧需要按照物理地址顺序给每个页帧编号,称为页帧号(Page Frame Numeber,PFN)CPU内部负责虚拟页面到物理页面转换的硬件单元称为内存管理单元(Memory Management Unit,MMU)ARM处理器的MMU包括TLB和Table
Linux内核学习(2)-系统调用 1. 概念系统调用是内核空间和用户空间的中间层。有如下作用:为用户空间程序提供一层硬件抽象接口保证系统稳定和安全可移植性2.系统调用表Linux的每一个系统调用都存在一个系统调用号,一旦分配不可更改。对于ARM32定义在arch/arm/include/uapi/asm/unistd.h文件中:/* * This file contains the system call numbers. */#define __NR_restart_syscall
Linux内核学习(1)-常用GNUC技巧 常用GNU C技巧GNU C对ANSI C进行了扩展,所以GCC有一些扩展的新特性(1)语句表达式括号里的复合语句可以看作一个表达式,并可以使用循环和局部变量等。通常用在宏定义中,可以让宏定义更加安全。#define max(a,b) \({int _a = (a), _b = (b); _a > _b ? _a : _b;})(2) typeof可用来获取类型来构造新的类型typeof (*x) y; //声明y是x指针指向的类型(3)零长数组允许使用变长数组<mm
Nginx学习(4)-代理服务 1.正向代理与反向代理区别代理的对象不一样,正向代理客户端,反向代理服务端2.配置语法语法:proxy_pass URL;上下文:location,if in location ,limit_except...
Nginx学习(3)——作为静态web服务 1.静态资源类型即非服务器动态运行生成的文件类型种类浏览器端渲染HTML,css,js图片JPEG,gif,png视频flv,mpeg文件txt等任意下载文件2.静态资源服务场景-CDN名词解释CDN(Content Delivery Network):内容分发网络3.配置语法文件读取:语法:sendfile on|off;de...
Nginx学习(2)——访问控制 访问控制基于IP的访问控制 - http_access_module语法:allow address|CIDR|unix:|all上下文:http,server,location,limit_except语法:deny address|CIDR|unix:|all上下文:http,server,location,limit_exceptlocation ~ ^ /admin.h...
Nginx学习(1)——模块 Nginx模块(1) stub-status编译选项 --with-http_stub_status_module显示Nginx客户端的状态在server和location下配置(2) random index编译选项 --with-http_random_index_modele目录中选择一个随机主页(3)sub_modulehttp内容替换欢迎使用Markdow...
Linux驱动开发(13)——并发与原子操作 并发并发的概念多个执行单元同时、并行被执行。Linux系统是多任务的,很多任务会同时执行。假如有三个执行单元ABC,共享了内存资源。执行单元A对Buffer写1000个“a”;执行单元B对Buffer写1000个“b”;执行单元C从buffer中读取数据。如果按照A写→C读→B写→C读,当然没有问题。但是如果A写→B写→C读,执行单元C就出问题了。当然比这个复杂更多,更加混乱的并发...
Linux嵌入式开发(12)——ioremap控制寄存器 ioremap函数可以实现物理地址到虚拟地址的转化void gpl2_device_init(void){ //物理地址起始地址0x11000100→0x11000108 phys_addr = 0x11000100; //0x11000100是GPL2CON的物理地址 virt_addr =(unsigned long)ioremap(phys_addr,0x10); //指定需要...
Linux驱动开发(11)——GPIO读 static int read_gpio_probe(struct platform_device *pdv){ int ret; printk(KERN_EMERG "\tinitialized"); //申请GPIO ret = gpio_request(EXYNOS4_GPC0(3),"SWITCH3"); if(ret < 0){ printk(KERN...
Linux驱动开发(10)——生成字符类设备节点 static struct class *myclass;myclass = class_create(THIS_MODULE,DEVICE_NAME);/*创建设备节点*/device_create(myclass,NULL,MKDEV(numdev_major,numdev_minor+i),NULL,DEVICE_NAME"%d",i);/*释放设备class*/class_des...
Linux驱动开发(9)——注册字符设备 static int scdev_init(void){ int ret = 0,i; dev_t num_dev; printk(KERN_EMERG "numdev_major is %d!",numdev_major); printk(KERN_EMERG "numdev_minor is %d!",numdev_minor); if(numdev_major...
Linux驱动开发(8)——静态和动态申请字符设备 先贴一段demo#include &lt;linux/init.h&gt;/*包含初始化宏定义的头文件,代码中的module_init和module_exit在此文件中*/#include &lt;linux/module.h&gt;/*包含初始化加载模块的头文件,代码中的MODULE_LICENSE在此头文件中*//*定义module_param module_param_array...
Linux驱动开发(7)——驱动模块传参 头文件在include/linux/moduleparam.h传递单个参数:module_param(name,type,perm)- name:模块参数的名称- type: 模块参数的数据类型(支持int long short uint ulong ushort类型)- perm: 模块参数的访问权限(S_IRUSR参数表示所有文件所有者可读)例如:module_param(modu...
Linux驱动开发(6)——GPIO初始化 gpio-exynos4.c文件的最后一行core_initcall(exynos4_gpiolib_init);core_initcall代表在linux初始化过程中会调用exynos4_gpiolib_init函数中包括chip = exynos4_gpio_common_4bitexynos4_gpio_common_4bit为结构体,如下: .base = (S5P_VA...