HeathXian
嵌入式 分布式后端 网络安全 主机安全
展开
-
统信Unknown symbol uld_fcheck_file (err -2)
knl: module verification failed: signature and/or required key missing - tainting kernel 是指被加载的knl.ko没有签名,内核被污染,但继续执行。为了查找给定fd的文件结构,一个读取器必须使用fcheck()或fcheck_files() api。这些注意由于无锁查找而产生的屏障需求。fcheck实际上是fcheck_files函数,作用是检查指定fd是否有打开的文件。(检查一个fd是否被占用)原创 2024-04-09 18:24:42 · 232 阅读 · 0 评论 -
qemu快速入门
当然,需要在编译qemu-kvm时需要配置SDL的支持,之后才能编译SDL功能到QEMU的命令行工具中,最后才能启动客户机时使用SDL的功能。在编译qemu-kvm的系统中,需要有SDL的开发包的支持,在RHEL6.3系统中需要安装SDL-devel这个RPM包。如果有SDL-devel软件包,在3.4.2节中配置QEMU时默认就会配置为提供SDL的支持,通过运行configure程序,在其输出信息中可以看到“SDL support yes”即表明SDL支持将会被编译进去。4 使用 qemu-kvm。原创 2024-03-23 23:58:03 · 404 阅读 · 0 评论 -
qemu启动镜像提示 VNC server running on ::1:5900
既然缺少了SDL,但是还是提示 support no,通过查看configure文件发现有个sdl相关选项,那么就手动开启--enable-sdl看看怎么回事?qemu启动镜像之后出现以下提示VNC server running on ::1:5900。SDL2无法通过yum install SDL2来安装,只有手动安装。原来时需要SDL2-devel,那些卸载之前的SDL之后装SDL2。默认情况下,安装安装SDL就会知道安装SDL-devel。查看配置是否支持了SDL,结果发现还是不支持。原创 2024-03-23 17:56:02 · 321 阅读 · 0 评论 -
scp后台免密传输
以上3个文件,相信大家都看出来了,都是放在同一文件夹下面的.我本地测试只用ssh密码,没有加上ssh key,如果要用上跟我们公司正式环境一样的安全方式(ssh密码+key,才能登录服务器),那么请自己修改脚本文件,我比较懒这里就不说得那么详细了.原创 2024-03-21 11:02:50 · 182 阅读 · 0 评论 -
expect语法
这一点就和前面说的tcl的命令解析方式有关了,因为第一种格式虽然占用的行数多,但是它是一个单独的expect命令,所以expect可以一次性将所有情况解析出来,然后组成一个大的并行分支;eof不仅可以从process送往expect,也可以从expect送往process,使process退出,在expect脚本中用close显式结束一个进程,通常情况下,process和expect一个结束了,另一个也会随之结束。返回的结果是不一样的,eof和timeout一样,也是一个特殊的匹配样式,表示程序结束。原创 2024-03-21 10:56:49 · 62 阅读 · 0 评论 -
bootloader之uboot(二)
(1)uboot主要作用是用来启动操作系统内核。(2)uboot还要负责部署整个计算机系统。(3)uboot中还要驱动一些外设比如Flash。lcd,触摸屏等。(4)uboot还得提供一个命令行界面供人来操作。原创 2024-03-20 18:52:56 · 178 阅读 · 0 评论 -
通过yum安装kernel-devel-3.10.0-693,为什么旧的kernel-devel-3.10.0-229将被移除?
通过yum安装kernel-devel-3.10.0-693,为什么旧的kernel-devel-3.10.0-229将被移除?原创 2024-03-20 10:54:12 · 68 阅读 · 0 评论 -
内核模块适配(二) - Unkonwn symbol
内核模块适配, 内核模块最好的适配方式介绍原创 2024-02-29 17:29:11 · 233 阅读 · 0 评论 -
内核适配 (一)
"rdi"寄存器的值加上"0xc8"得到一个内存地址,将该地址处的变量的值赋给"rbp"(注意这里是AT&T汇编语法,而不是Intel汇编语法),然后计算出"rbp"加上"0x40"的地址送给"r14",所以这里前一个"rdi"存储的值就是"file",而"rbp"存储的值就是"private_data"(即"seq_file")。这里显然是在做一个"open"操作,没有debuginfo,不知道具体打开的是哪个文件,不过从"proc_reg_open"来看,应该是在访问"/proc"目录下的某个文件。原创 2024-02-28 18:48:04 · 79 阅读 · 0 评论 -
Linux内核版本号
linux内核版本详解原创 2024-02-26 11:10:10 · 747 阅读 · 0 评论 -
Linux内核模块签名与版本检查机制
Linux内核模块签名,Linux内核版本检查机制原创 2024-02-27 20:00:09 · 564 阅读 · 0 评论 -
查看linux某个内核模块导出的符号
查看 内核模块ip6table_filter导出的符号。原创 2023-04-21 19:07:18 · 246 阅读 · 1 评论 -
RISC-V资源列表
OpenV: 支持RV32的开源微处理器,Verilog,MIT Licensed,OnChipUIS,来源于哥伦比亚的Universidad Industrial de Santander。Rocket-Chip: Chisel,BSD Licensed, Free chips project, UC Berkeley分离的开源工程。RV12: RoaLogic的RV32微处理器。Freedom: Chisel,Apache Licensed, SiFive, UC Berkeley分离的初创企业。转载 2023-01-11 22:13:13 · 344 阅读 · 0 评论 -
bootloader之u-boot
u-boot 简介 在嵌入式开发中bootloader称为启动加载器,是必不可少的功能部件。它的功能是在系统上电后初始化最基本的硬件,加载linux内核到内存中并引导内核,通常还支持一些其他的功能,如tftp下载功能等。常用的bootloader有u-boot,vivi等。 系统上电之后,需要一段程序来进行初始化:关闭看门狗,设置系统时钟,初始化存储控制器(让内存工作起原创 2017-05-10 12:13:51 · 1036 阅读 · 0 评论 -
linux 启动 引导
裁剪 把Linux系统拆开自己将各个组件组装,然后完成一个微型的Linux系统。内核的引导 引导Linux系统的过程将以引导X86PC为例。引导X86PC上的linux的过程和引导嵌入式系统上的Linux的过程基本类似。不过在X86PC上有一个从BIOS(Basic Input-Output System)转移到Bootloader的过程,而嵌入式系统往往 复位后就直原创 2017-04-14 14:49:19 · 533 阅读 · 0 评论 -
Kconfig Makefile 内核编译
在linux 内核中增加程序需要完成以下3项工作:> 将编写的源代码拷入Linux内核源代码的相应目录。> 在目录的Kconfig文件中添加关于新源代码对应项目的编译配置选项。> 在目录的Makefile文件中添加对新源代码的编译条目。makefile语法:1,目标定义:就是用来定义那些内容要作为模块编译,那些要编译并连接进内核。例如:obj-y += foo.o,表示要由原创 2017-04-19 11:22:48 · 616 阅读 · 0 评论 -
linux 内核模块简介
linux内核很庞大,怎样把需要的部分都包含在内核中:1,把需要的功能都编译到内核。这会导致内核很大,如果要在内核中下新增或删除功能需要重新编译。2,使用linux 模块机制。模块机制:模块本身不被编译入内核,模块一旦被加载它就和内核中的其他部分完全一样。#include #include static int hello_init(void){ printk(KERN原创 2017-04-19 18:06:55 · 483 阅读 · 0 评论 -
mount 整个flash内容
通过烧录器读取device_ng中f整个lash存储器内容得到一个device_ng_file文件。device_ng中flash 分区情况:一个u-boot分区 + 一个kernel分区 + 一个app分区。需求是得到device_ng_file文件中(二进制文件)app分区的内容(文件,文件夹)。解决方法:将文件内容烧到分区中,挂载这个分区。 1,根据devi原创 2017-04-21 18:11:12 · 1166 阅读 · 0 评论 -
linux 并发 同步
驱动运行再内核空间,这样必须要了解内核运行的基本原理,比如说什么时候放弃cpu等。驱动大多数情况下,是对外设访问。cpu经常要等IO,因为最快的是cpu然后memory最后是外设。共享资源被多个线程访问时,锁应该是锁一个语义完整的整体。原子操作:对象应该是一个语义完整的整体并且只有一个变量。void atomic_set(atomic_t *c, int i);void a原创 2017-04-26 11:36:04 · 654 阅读 · 0 评论 -
锁(一) 中断屏蔽 原子操作
中断屏蔽单cpu,在单cpu范围内避免竞态的简单方法是在进入临界区之前屏蔽系统的中断。cpu一般都具备屏蔽中断和打开中断的功能,这项功能可以保证正在执行的内核执行路径不被中断处理程序抢占,防止某些竞态条件的发生。由于linux内核的进程调度等操作都依赖中断来实现,内核抢占进程之间的并发也得以避免。中断屏蔽的使用方法为:local_irq_disable() //屏蔽中断原创 2017-04-27 10:38:11 · 1933 阅读 · 0 评论 -
锁(二) 信号量 读写信号量 互斥体
信号量是用于保护临界区的一种常用方法,它的使用方式和自旋锁类似。与自旋锁相同的是只有得到信号量的进程才能执行临界区代码。与自旋锁不同的是,当获取不到信号量时,进程不会原地打转而是进入休眠等待状态。linux中信号量的主要操作: 1,定义信号量 struct semaphore sem; 2,初始化信号量 void sema_init(struct semaphor原创 2017-05-04 11:58:42 · 553 阅读 · 0 评论 -
锁(三) 完成量
完成量用于一个执行单元等待另一个执行单元执行完某事。linux中完成量的主要操作 1,定义完成量 struct completion { unsigned int done; wait_queue_hea原创 2017-05-04 17:56:45 · 413 阅读 · 0 评论 -
linux 块设备驱动
虚拟文件系统(vfs)层类似于面向对象中的“抽象基类”的概念,而下面一个个具体的文件系统就相对于这个抽象基类的"派生类",所有文件操作如 open, read, write等在vfs中只是实现了一个类似于“纯虚函数”的接口,针对具体的文件系统,就会使用其派生类中被“改写”的“虚函数”。块设备和字符设备相同之处: 1 . 都经过vfs向用户空间提供上述中的文件操作接口o原创 2017-05-05 22:53:28 · 441 阅读 · 0 评论 -
linux设备驱动中阻塞与非阻塞I/O
阻塞与非阻塞I/O 阻塞操作是指在执行设备操作时,若不能获得资源,则挂起进程直到满足可操作的条件后再进行操作。 被挂起的进程进入休眠状态,被移出调度器的运行队列,直到等待的条件被满足。 非阻塞操作的进程在不能进行设备操作时,并不挂起,它或者放弃,或者不停地查询,直到可用进行 操作为止。 驱动程序通常需要提供这样的能力,支持阻塞和非阻塞的进行re原创 2017-05-05 11:58:53 · 540 阅读 · 0 评论 -
轮询 设备驱动
轮询应用程序中使用的系统调用select()和poll()查询是否可对设备驱动进行无阻塞的访问,他们都是最终引发驱动中的poll()函数被执行。应用程序中的轮询 #include int select( int nfds, fd_set FAR* readfds, fd_set * writefds, fd_set * exceptfds, const s原创 2017-05-06 17:58:20 · 700 阅读 · 0 评论