![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
转载记录
文章平均质量分 73
it潮人
这个作者很懒,什么都没留下…
展开
-
《一篇搞懂》系列之一 —— iptables
iptables其实只是一个简称,其真正代表的是这个IP数据包过滤系统。为了简便,本文也将整套系统用iptables简称。iptables是3.5版本的Linux内核集成的IP数据包过滤系统。当系统接入网络时,该系统有利于在Linux系统上更好地控制IP信息包和防火墙配置。此外,iptables还可以进行NAT规则的管理。netfilter位于内核空间,是内核的一部分,由一些数据包过滤表组成,这些表包含内核用来控制数据包过滤处理的规则集;转载 2024-07-26 10:16:29 · 37 阅读 · 0 评论 -
一文详解iptables基础知识
iptables防火墙可以用于创建过滤(filter)与NAT规则。所有Linux发行版都能使用iptables,因此理解如何配置 iptables将会帮助你更有效地管理Linux防火墙。如果你是第一次接触iptables,你会觉得它很复杂,但是一旦你理解iptables的工 作原理,你会发现其实它很简单。首先介绍iptables的结构:iptables -> Tables -> Chains -> Rules. 简单地讲,tables由chains组成,而chains又由rules组成。如下图所示。转载 2024-07-26 10:07:20 · 286 阅读 · 0 评论 -
OpenWrt启动过程分析+添加自启动脚本
之后还需要在rc.d目录下做一个链接,启动时系统会按顺序启动rc.d目录下的脚本链接,对应执行init.d目录下的启动脚本。总结一下OpenWrt的启动流程:1.CFE->2.linux->3./etc/preinit->4./sbin/init ->5./etc/inittab ->6./etc/init.d/rcS->7./etc/rc.d/S* ->8.OpenWRT的启动脚本放在 /etc/init.d 目录下,而系统开机时自动运行/etc/rc.d目录下的脚本。之后,linux系统启动起来了。转载 2024-07-23 18:29:12 · 451 阅读 · 0 评论 -
Linux系统调用--getrlimit()与setrlimit()函数详解
终止w/core的含义是:在进程当前目录生成core文件,并将进程的内存映象复制到core文件中,core文件的默认名称就是“core”(这是 Unix类系统的一个由来已久的功能)。这里要注意的是,当你要修改limit的时候,如果不指定-S或者-H,默认是同时设置soft limit和hard limit。在linux系统中,Resouce limit指在一个进程的执行过程中,它所能得到的资源的限制,比如进程的core file的最大值,虚拟内存的最大值等。//进程可建立的文件的最大长度。转载 2024-07-11 11:27:45 · 76 阅读 · 0 评论 -
Source Insight 4.0的超实用的常规设置小技巧
【Options】->【Preferences】 ->【File】->【Default encoding】修改为:Chinese Simplified(GB2312),关闭所有文件,重启即可。【Options】->【File type Options】,选择【Auto Indent…】弹出对话框,将【Smart Indent Options】下的两个复选框的√去掉即可。【Options】->【File type Options】,勾选下图所示选项。打开函数调用关系窗口,这个窗口在你。转载 2024-06-15 17:38:05 · 482 阅读 · 0 评论 -
linux内核cdev_init系列函数(字符设备的注册)
kobj_map函数中哈希表的实现原理和前面注册分配设备号中的几乎完全一样,通过要加入系统的设备的主设备号major(major=MAJOR(dev))来获得probes数组的索引值i(i = major % 255),然后把一个类型为struct probe的节点对象加入到probes[i]所管理的链表中,如图2-6所示。其中,dev是它的设备号,range是从次设备号开始连续的设备数量,data是一void *变量,指向当前正要加入系统的设备对象指针p。初始化 cdev 后,需要把它添加到系统中去。转载 2024-06-14 11:44:43 · 117 阅读 · 0 评论 -
register_chrdev_region、alloc_chrdev_region、register_chrdev区别
内核提供了三个函数来注册一组字符设备编号,这三个函数分别是和。这三个函数都会调用一个共用的函数向内核设备表来注册一组设备编号范围(即一个 char_device_struct 结构)。转载 2024-06-07 09:45:50 · 200 阅读 · 0 评论 -
01-register_chrdev_region解析
注意:cp = &(*cp)->next,cp是char_device_struct **类型,(*cp)->next是一个char_device_struct 类型,所以&(cp)->next,就得到一个char_device_struct **,并且这时候由于是指针,所以对cp赋值,就相当于对链表中的元素的next字段进行操作。在内核4.4版本中,MKDEV(ma,mi) ((ma)<<8 | (mi)),与之前的主设备号占高12位,次设备号占低20位不同,所以次设备号只能从0~255,转载 2024-06-06 17:50:34 · 38 阅读 · 0 评论 -
【Linux API 揭秘】module_init与module_exit
目录1、函数作用2、module_init函数解析2.1 module_init2.1.1 模块方式2.1.2 内建方式2.2 __initcall2.2.1 代码调用流程2.2.2 #和##的作用2.2.3 函数解析3、module_exit函数解析3.1 module_exit3.1.1 模块方式3.1.2 内建方式3.2 __exitcall4、扩展module_init和module_exit是驱动中最常用的两个接口,主要用来注册、注销设备驱动程序。并且这两个接口的实现机制是一样的,我们先以modu转载 2024-06-06 16:44:44 · 34 阅读 · 0 评论 -
【Linux】内核线程创建 kthread_run 函数和内核中断
kthread_run函数详解以PCIE的热插拔内核线程创建为例说明注意:内核线程和RTOS的线程略有不同,这里Linux上创建以后直接运行,RTOS上有的是需要加入到调度队列中后才会执行,比如RT-Thread的系统kthread_run 是 Linux 内核中的一个函数,用于创建和运行内核线程(Kernel Thread)。在 Linux 内核中,线程是一种轻量级的执行单位,可以独立运行并共享进程资源。转载 2024-06-06 15:08:45 · 38 阅读 · 0 评论 -
notepad++ 打开提示“Folder xx does not exist“解决
nodepad++打开文件 ,提示 xx catnot be opened,Folder xx does not exist",原因是文件是被notepad++以管理员权限方式打开的,重新以非管理员打开正常。即:退出notepad++重新进入即可!转载 2024-06-05 10:04:46 · 85 阅读 · 0 评论 -
Win11怎么重置系统?(小白专享篇)
重置Windows 11系统的步骤如下:方法一:1.同时按下【Windows+i】键打开系统设置。2.在当前页面下拉选择【系统】-【恢复】。3.点击重置此电脑下的【初始化电脑】。4.点击【删除所有内容】。5.选择删除所有内容后,继续选择安装Windows的方式,选择从【本地重新安装】即可。6.选择从本地重新安装后系统会提示电脑重置会删除的内容,点击【下一步】即可。7.点击下一页后系统会再确认一次重置需要删除的内容,直接点击【重置】即可。转载 2024-05-30 17:48:15 · 1145 阅读 · 0 评论 -
svn 分支(branch)和标签(tag)管理
版本控制的一大功能是可以隔离变化在某个开发线上,这个开发线就是分支(branch)。分支通常用于开发新功能,而不会影响主干的开发。也就是说分支上的代码的编译错误、bug不会对主干(trunk)产生影响。然后等分支稳定之后,可以再合并到主干上。版本管理系统的一大功能是标记特定版本,以便在任何时候都可以重建某个版本的环境,这个标记版本的动作就是打标签。svn不需要特殊命令来打分支或者打标签。它使用的是一种“轻量copy”的方式,这种方式有些像unix的硬链接。转载 2024-05-29 18:41:09 · 1126 阅读 · 0 评论 -
安装系统时找不到硬盘的处理方法
路径一般为在【Drivers】-【Production】下,选择【Windows10-x64】,点击【确定】。在出现的页面点击【驱动程序和下载】,在【关键字】中搜索:rapid,找到【英特尔快速存储技术驱动程序】,点击【下载】,下载的文件默认保存位置或保存到自己可以找到的位置即可。下载完成后,先把U盘接到电脑上,然后找到下载的文件,双击运行。接着在出现的页面选择【EXTRACT】进行解压,解压路径选择接入的U盘,等待解压完成。1、修改BIOS的硬盘模式为AHCI模式后,重启电脑,再次安装系统。转载 2024-05-28 19:30:55 · 1715 阅读 · 0 评论 -
failed to set hardware filter to promiscuous mode:连到系统是上的设备没有发挥作用(31)
百度网盘:https://pan.baidu.com/s/1BIyXd7aIGaULww9g0n-WJw 提取码: yequ。阿里云盘:https://www.aliyundrive.com/s/4UjQ3uEqywz 提取码:onechina。阿里云盘:https://www.aliyundrive.com/s/KrZZxS4jSPU 提取码:xv80。npcap软件下载页(需加速):https://npcap.com/dist/详细问题定位阅读:http://issues.npcap.org/628。转载 2024-05-28 19:28:23 · 374 阅读 · 0 评论 -
Ventoy的pe盘制作及重装系统步骤【解释的非常清楚!!!】
当我们使用一般的pe盘的时候,他会把我们的u盘格式化,而且里面下载了很多文件,我们可能就不敢轻易的使用这个u盘作为我们日常使用的u盘,只是把它放起来等到需要重装系统的时候才会拿出来,这就造成了u盘的浪费。而Ventoy就能解决这个问题。转载 2024-05-28 19:20:31 · 692 阅读 · 0 评论 -
嵌入式Linux--U-Boot(五)NAND命令使用
uboot 是支持 NAND Flash 的,所以也有 NAND Flash 的操作命令,前提是使用的 NAND 版本的核心板,并且编译 NAND 核心板对应的 uboot,然后使用 imxdownload 软件将 u-boot.bin 烧写到 SD 卡中,最后通过 SD 卡启动。从上面给出了 NAND 的页大小、OOB 域大小,擦除大小等信息。上图中的文件就是我们写到 NAND 中的设备树文件,至于设备树文件的详细内容我们后面会有专门的章节来讲解,这里大家知道这个文件就行了。转载 2024-05-27 09:41:16 · 311 阅读 · 0 评论 -
vscode编译多文件复杂项目时tasks.json launch.json 的配置
本文介绍了利用vscode编译复杂工程的方法,包括gcc和cmke编译时 tasks.json launch.json c_cpp_properties.json 的具体配置。一、编译代码使用例子c/c++在windows下编译:使用MinGW gcc从零编译项目二、g++配置tasks.json launch.json c_cpp_properties.jsontasks.json编译程序所需要的指令"tasks": [//下面两条g++语句编译动态库。转载 2024-05-24 14:05:22 · 287 阅读 · 0 评论 -
MinGW-w64的安装详细步骤(c/c++的编译器gcc、g++的windows版,win10、win11真实可用)
MinGW(Minimalist GNU for Windows) 是一个用于 Windows 平台的开发工具集,它提供了一组 GNU 工具和库,可以用于编译和构建本地的 Windows 应用程序。MinGW 的目标是在 Windows 环境下提供类似于 Unix/Linux 环境下的开发工具,使开发者能够轻松地在 Windows 上编写和编译 C、C++ 等程序。转载 2024-05-24 09:30:49 · 4591 阅读 · 1 评论 -
csdn分类专栏使用指南
如果建二级分类,需要 “#”+“空格”+分类名,这样就可以建立一个二级分类。注:二级分类是单独的分类,和一级分类并无父子关系。分类专栏上线了,很多小伙伴不会使用,写个简单的操作指南,供大家参考。建立好二级分类以后,可以鼠标直接拖拽,放到你制定的一级分类下。选择你要添加的文章,选择好以后,点击 应用。选择你需要新增文章的二级分类,点击查看。如果建一级分类,直接输入分类名就行。注::: 分类可以直接拖拽排序!至此,该二级分类,新增文章完成。2.给二级分类下增加新文章。点击新建,增加一个分类。转载 2024-05-10 09:29:19 · 101 阅读 · 0 评论 -
线程五种状态及其相关方法,线程安全
第一:调用notify() 方法导致解除阻塞的线程是从因调用该对象的 wait()方法而阻塞的线程中随机选取的,我们无法预料哪一个线程将会被选择,所以编程时要特别小心,避免因这种不确定性而产生问题。第二:除了notify(),还有一个方法 notifyAll()也可起到类似作用,唯一的区别在于,调用 notifyAll()方法将把因调用该对象的 wait()方法而阻塞的所有线程一次性全部解除阻塞。当然,只有获得锁的那一个线程才能进入可执行状态。转载 2024-05-10 09:23:32 · 34 阅读 · 0 评论 -
Linux多核运行机制(SMP)
/load_balance检查该cpu在这一层的调度域中是否存在负载不平衡的情况,如果存在该cpu会分担负载最重的那个cpu的一些任务。/* (7) 如果本sd的balance间隔时间已到,进行实际的load_balance() *//* (6) 如果需要串行化(SD_SERIALIZE),做balance之前需要持锁 */for_each_domain(cpu, sd) {//遍历该cpu的所有调度域,从最低一级到最高一级。// next_decay_max_lb_cost 是下一次进行衰减的时间。转载 2024-05-09 17:17:29 · 813 阅读 · 0 评论 -
PPPoE体系架构 pppoe 流程
发现阶段结束后,就进入标准的PPP会话阶段。LCP协商的过程如下:协商双方互相发送一个LCP Config-Request报文,确认收到的Config-Request报文中的协商选项,根据这些选项的支持与接受情况,做出适当的回应。(2)Config-NAK:若支持对端的协商选项,但不认可该项协商的内容,则回应Config-NAK报文,在Config-NAK的选项中填上自己期望的内容,如:对端MRU值为1500,而自己期望MRU值为1492,则在Config-NAK报文中埴上自己的期望值1492。转载 2024-04-28 15:08:30 · 69 阅读 · 0 评论 -
操作系统 宏内核和微内核的区别
优点:超级稳定,驱动等的错误只会导致相应进程死掉,不会导致整个系统都崩溃,做驱动开发时,发现错误,只需要kill掉进程,修正后重启进程就行了,比较方便。宏内核:简单来说,就是把很多东西都集成进内核,例如linux内核,除了最基本的进程、线程管理、内存管理外,文件系统,驱动,网络协议等等都在内核里面。内核态:CPU可以访问内存的所有数据,包括外围设备,例如硬盘,网卡,CPU也可以将自己从一个程序切换到另一个程序。缺点:稳定性差,开发过程中的bug经常会导致整个系统挂掉。宏内核和微内核的区别。转载 2024-04-28 10:44:04 · 185 阅读 · 0 评论 -
python 2x和python 3x的区别_python2x和python3的区别
py3x: nonlocal将变量声明为一个非局部变量 11,字符串区别: py2x: unicode类型表示字符串序列,str类型表示字节序列 py3x: str类型表示字符串序列,byte类型表示字节序列。py2x:python2中input的到的数据类型为int型,Python2x是 raw_input()得到是str字符串 py3x python3x中是 input()得到是字符串str。12,1/2的结果区别 py2x: 返回0 py3x: 返回0.5,没有了int和long的区别。转载 2024-04-17 11:54:00 · 195 阅读 · 0 评论 -
cmd下telnet命令不被识别为内部或外部命令
cmd窗口中提示telnet不是内部或外部命令这个问题想必曾经也深深的困扰着你吧,这个问题的出现并不是因为用户们的操作哪里有什么不对用户们也不用太担心只需要一些小小的操作设置就可以让cmd窗口提示telnet不是内部或外部命令这个问题迎刃而解,一起来看看小编今天为大家带来的cmd窗口提示telnet不是内部或外部命令解决办法吧。转载 2024-04-09 17:14:54 · 368 阅读 · 0 评论 -
Device Tree 详解
对于DeviceTree的来历和用处大部分人都已经非常了解了,DeviceTree发源于PowerPC架构,为了消除代码中冗余的各种device注册代码而产生的,现在已经成为了linux的通用机制。其中“bootargs”属性用来传递cmdline参数,“stdout-path”属性用来指定标准输出设备,“stdin-path”属性用来指定标准输入设备。“parent unit address”的cells长度由父节点的“#address-cells”指定;每个DeviceTree只有一个根节点。转载 2024-04-03 10:19:44 · 239 阅读 · 0 评论 -
uboot第一阶段分析(上)
mkimage在制作映象文件的时候,是在原来的可执行映象文件的前面加上一个0x40字节的头,记录参数所指定的信息,这样uboot才能识别这个映象是针对哪个CPU体系结构的,哪个OS的,哪种类型,加载内存中的哪个位置, 入口点在内存的那个位置以及映象名是什么。============================================================对于uboot两阶段的小结,很重要!转载 2024-04-02 14:08:06 · 55 阅读 · 0 评论 -
PBL-SBL1-(bootloader)LK-Android启动过程详解之一(高通MSM8953启动实例)
更重要的是, AArch64作为一个分离出的执行状态,意味着一些未来的处理器可能不支持旧的 AArch32执行状态。我们在这些系统中将不支持 32位执行状态,这将使许多有益的实现得到权衡,如默认情况下,使用一个较大的 64K大小的页面,并会使得纯净的 64位 ARM服务器系统不受遗留代码的影响。为了切换到AArch64模式,SBL1会启动重映射器,操作RMR寄存器,然后触发warm-reset,QSEE就能够运行在AArch64模式了。QSEE建立安全运行环境,配置xPU,支持fuse。转载 2024-04-02 11:16:39 · 323 阅读 · 0 评论 -
UBoot怎么跳转到Kernel:uboot与linux的交界
_attribute__定义了结构体的属性,将结构体放在.u_boot_cmd段中。这样我们通过U_BOOT_CMD宏就定义了cmd_tbl_t类型的结构体变量,变量名为**__u_boot_cmd_bootm**,同时用U_BOOT_CMD宏中的参数对cmd_tbl_t结构体中的每个成员进行初始化。Struct_Section定义了结构体变量的段属性,cmd_tbl_t类型的结构体变量链接时全部链接到u_boot_cmd段中,可以查看u-boot.lds文件对u_boot_cmd段位置的安排。转载 2024-03-28 09:32:06 · 188 阅读 · 0 评论 -
mkimage与dumpimage使用
通过mkimage -f o.its image.ub打包了image.ub文件,同样可以将image.ub解压,抽取里面的独立文件。版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。其中image.ub是用于启动的内核,他是怎么来的呢?其中its文件里面描述了用于打包itb文件的信息,包括文件类型,路径,压缩方式等。在使用petalinux制作ZYNQ嵌入式系统时,最终产生了如下文件。打包linux内核,增加头部信息,制作uImage。转载 2024-03-26 12:01:43 · 345 阅读 · 0 评论 -
无线丢包排查方法
WLAN使用过程中,有时候会发现终端在ping其他设备时,出现丢包的现象。这种情况下可能还伴随ping的延时增大(几百毫秒),可能会导致应用下载速度变慢、视频出现抖动等等情况。该种情况应该是WLAN网络中比较困难的一个问题,一方面无线本身复杂的空间媒质带来了空口的不稳定性,另一方面要综合考虑整个网络的配置和性能。转载 2024-03-19 10:35:45 · 611 阅读 · 0 评论 -
CMakeLists.txt的用法
一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。他们之间的调用关系复杂而严格,如果我想在这样复杂的框架下进行二次开发,显然只拥有它的源码是远远不够的,还需要清楚的明白这几十个项目之间的复杂关系,在没有原作者的帮助下进行这项工作几乎是不可能的。将他的命令解析出来一条一条执行。转载 2024-03-14 17:31:42 · 217 阅读 · 0 评论 -
python笔记(异常处理)
跟Java一样,也有类似try...catch...的异常处理机制。在程序中有做异常处理最大的好处是代码段出现异常之后,仍然能够继续执行下去。转载 2024-03-14 17:24:29 · 36 阅读 · 0 评论 -
uboot启动流程详解(5)-_main
也就是说,代码在取符号(全局变量、函数等)的时候,会使用相对地址的方法去函数末尾的Lable中取到该符号的地址(说明白点,就是这些Lable存储了要查找符号的地址),然后再根据该地址读取符号的内容。由于arm的流水线架构,所以执行第(1)条指令时pc是指向第(3)条指令的,再加上44(也就是再往下数11条指令,因为一条指令4个字节),即指向了地址为的语句,然后将其内容加载到r3中(即r3=0x87838c3c,对照上面的数据段,可知这就是变量test_val的地址);转载 2024-03-13 17:02:16 · 115 阅读 · 0 评论 -
uboot启动流程详解(4)-cpu_init_crit
ldrARM指令集中,LDR通常都是作加载指令的,但是它也可以作伪指令。(1)LDR r0,=name,像这种带等号的是伪指令,而不是ARM指令,LDR 伪指令用于加载立即数或一个地址值到指定寄存器。如果name是立即数的话:LDR R0,=0X123;//将0X123存入R0如果name是个标识符:LDR R0,=NAME;//将NAME的地址存入R0相当于://分配内存并用NAME初始化(LABEL为内存的起始地址?转载 2024-03-13 17:00:30 · 56 阅读 · 0 评论 -
uboot启动流程详解(3)-cpu_init_cp15
3、如果想要详细阅读以下代码,需要查阅arm的参考手册。1、关于p15协处理及其指令的介绍请看。2、关于mmu的详细介绍请查看。转载 2024-03-13 16:56:18 · 41 阅读 · 0 评论 -
uboot启动流程详解(2)-reset
1、源码及注释 reset是uboot最先执行的代码,接下来我们来看看reset的具体流程。reset: /*如果没有重新定义save_boot_params,则使用<arch/arm/cpu/armv7/start.S> 中的save_boot_params。其不做任何事情,直接返回。*/ bl save_boot_params /* * disable interrupts (FIQ and IRQ), also set the转载 2024-03-13 16:49:23 · 124 阅读 · 0 评论 -
uboot启动流程详解(1)-_start
这个宏定义的主要作用就是生成 BL1 文件,提到 BL1 文件肯定又会有朋友产生疑问,在这里就这个 BL1 文件给大家简单的介绍一下:BL1 文件是一段外部代码,存放在 SD 卡或者 nandflash 上,大小为(4K\8K\16K)。除了 BL1 文件,还有 BL0 和 BL2 文件。BL0 文件是存放在 CPU 内部 IROM 中的一段固化代码,CPU 上点之后,首先去运行BL0 文件。BL2 文件是完整的 U-Boot 代码。转载 2024-03-13 16:47:03 · 53 阅读 · 0 评论 -
uboot的编译及连接过程
可以使用hexdump命令查看myboot.bin和其他.o文件的内容,如:hexdump -C myboot.bin,对比链接前后的差异。如果想在开发板上跑起来,还需要根据具体的cpu,将myboot.bin制作成相应的格式(一般在前面加个一个头),cpu的类型千千万万种,这里不说了,具体格式应该查看该cpu的datasheet。可以看到代码段大小120个字节,data段大小8个字节(变量b和c的大小),bss段的大小4个字节(变量a的大小),可执行程序的总大小为120+8+4=132。转载 2024-03-13 16:39:43 · 52 阅读 · 0 评论