- 博客(44)
- 收藏
- 关注
原创 【bmc22】nvme cli
经过测试发现如果系统内没有识别到盘的话,MCTP会不通。只是SMBUS的SlaveAddress会有,也能发通一些SMBUS ARP指令,但是MCTP发不同;所以,要测试NVME,要尽量保证能进系统,并且能正常识别出NVME盘;如下低速i2c管理硬盘背板cpld,pcie线里有2路pmbus接到bmc去管理nvme盘(上下可插2个盘)。如下mctp再换成nvme。如下0xe2就是0x71。
2025-04-26 00:06:35
224
原创 【bmc20】Redfish
computer systems和Manager By就是上面提到的relationship (Resource间的关系),Processors是Computer System的Property,那它也可以和Processor Resource产生一个关系如下,有些关系是会放在"Links"的property中。: 每个Entity 的这个Attribute都有独一无二的值,例如身份证字号/员工编号,都是key attribute (Redfish 世界常见的是@odata.id 或是 id)。
2025-04-26 00:06:09
611
原创 【bmc19】Dbus
获取/设置接口属性值:D-Bus的对象都含有一个接口org.freedesktop.DBus.Properties,可以通过其方法GetAll获取某个接口的所有属性值:busctl call service 对象 org.freedesktop.DBus.Properties GetAll s 接口 (接口名前的s是GetAll的输入参数类型,代表一个string,可以为该命令加上选项–json=pretty,这样可以输出内容为JSON易读格式)。signal可以做一个回调函数,发一个信号。
2025-04-26 00:06:00
945
原创 【bmc18】coredump
通过对libpam模块打patch的方式生成了自己的用户自定义pam_usrnum.so,并在shadow模块中进行逻辑配置,实现最大创建用户数量限制的功能。bitbake -s |grep libpam,devtool modify libpam,configure.ac:modules/pam_umask/Makefile modules/pam_usrnum/Makefile \,新建pam_usrnum/Makefile.am。如下还在/etc/pam.d/system-auth中,实现D。
2025-04-26 00:05:31
768
原创 【bmc16】led
其中注册bus服务名如xyz.openbmc_project.LED.Controller.bmc_heartbeat_r_n和设备文件夹名如/sys/class/leds/BMC_HEART_R_N都是根据BMC_HEART_R_N这个key来注册,BMC_HEART_R_N表示GPIOP7这个GPIO。“Action”有三种赋值,分别是“Off”、“On”、“Blink”,分别是灭,亮、闪烁,只有Action为“Blink”时,“DutyOn”、“Period”才会生效。
2025-04-26 00:04:45
207
原创 【bmc15】用户
通过对libpam模块打patch的方式生成了自己的用户自定义pam_usrnum.so,并在shadow模块中进行逻辑配置,实现最大创建用户数量限制的功能。bitbake -s |grep libpam,devtool modify libpam,configure.ac:modules/pam_umask/Makefile modules/pam_usrnum/Makefile \,新建pam_usrnum/Makefile.am。如下还在/etc/pam.d/system-auth中,实现D。
2025-04-25 22:43:33
2181
原创 【bmc14】fru-device & entity-manager
一个数字,而值则通过解析FRU获得。如下执行顺序,make_shared创建的智能指针采用引用计数的方式来维护对象的生命周期,当持有这个智能指针(及其副本)的所有代码块均运行结束时,该智能指针中包裹的对象会被析构:callback在创建时采用值捕获的方式获得了finalCallback的副本,这种行为会增加finalCallback的引用计数,只有在callback析构后才会轮到finalCallback的引用计数清零,才轮到GuardCallback析构并轮到do something 2被调用。
2025-04-25 22:27:29
1168
原创 【bmc13】fru
每个路径支持的属性可以参考代码:phosphor-ipmi-fru/oe-workdir/recipe-sysroot/usr/share/phosphor-dbus-yaml/yaml/xyz/openbmc_project/Inventory/Decorator/Asset.interface.yaml。fru指现场可更换单元(身份信息),物理载体可做芯片内的存储体,也可是外挂的eeprom,非物理载体:psu(寄存器),spd(集成在内存),卡类(pcie卡vendor id)。
2025-04-25 22:26:13
654
原创 【bmc11】rsyslog,journalctl,LogService
如下logfile.log是新文件,console.log不是新文件。omfile输出文件,与imfile相反。
2025-04-25 22:19:50
417
原创 【bmc10】ipmi sdr & sel,sensor
关闭health-monitor(可选),该模块是监控BMC自身CPU、DIMM、硬盘使用百分比。系统可能出现的问题:health-monitor模块和entity-manger以及phosphor-ipmi-host适配有点问题,如果遇见ipmi指令获取sensor时报错,很可能是该模块引起的。
2025-04-25 22:19:01
724
1
原创 【bmc9】时间相关
ntpstat查看每次更新间隔,NTP一般只会同步system clock,但要同步RTC(hwclock)的话需把/etc/sysconfig/ntpd中SYNC_HWCLOCK=yes。time_t只是一个长整型,不符合使用习惯,需转成方便表示时间的结构体即tm结构体,tm结构体在time.h中声明。localtime将时间戳转为北京时间的结构体(mktime也是北京时间),gmtime将时间戳转为世界时的结构体。ntp.conf修改后隔10分钟才去同步一次,重启ntp进程立马同步。
2025-04-25 22:18:16
919
原创 【bmc6】kcs,peci,me
1.PCH模式:需要先访问ME地址挂在smlink上,如下-b就是挂的bus号(i2c即smlink的bus号),-t是挂的地址,一般都是0x2c(设备地址)。BMC通过IPMI给ME发一个raw date命令,ME再发pcie命令到cpu。实际是ME不停给cpu发一些peci命令来获取它需要的数据,它把这些数据做一个缓存在自己内部,bmc向它访问数据的话,me会直接把缓存的数据回到bmc上,如下raw 6 1 是读ME的版本号。2.PECI模式。
2025-04-25 22:11:10
1106
原创 【bmc3】PXE/XDPE/INA系列vr芯片,ADC,HWMON子系统
如下十六进制HEX为c2ad(上面读出的值) ,49837乘2的-12次方 = 12.1(A)。如下计算机以补码形式存放负数,0010+1=0011(十进制3)。438乘2的-3次方 = 54.8(V)。(00:第一个状态码不显示)
2025-04-25 20:50:31
1154
原创 【bmc2】升级,dual flash,安全启动
如果ramdisk_execute_command为空的话就看execute_command是否为空, execute_command的值是通过U-Boot传递,在bootargs中使用“init=xxxx”就可以了,比如“init=/linuxrc”表示根文件系统中的linuxrc就是要执行的用户空间init程序。”)就可获得不同版本号。如果都没有找到用户空间的init程序,就提示错误发生,内核最终是需要和根文件系统打交道的,需要挂载根文件系统,并且执行根文件系统中的init程序,以此来进入用户态。
2025-04-25 16:53:59
1109
原创 【bmc1】概要,构建image,分区
在U-Boot的配置文件(例如:mx6ull_14x14_evk_deconfig)中定义CONFIG_OF_CONTROL=y时,将采用设备树的方式来提供驱动数据,fdtdec_setup()函数位于/lib/fdtdec.c中通过设置全局变量gd->fdt_blob的值,设置设备树的存放地址为u-boot的末尾(通过对比编译生成的u-boot.bin和u-boot-nodtb.bin也可以看到在u-boot.bin的末尾增加了设备树文件)。第257行为模式分区,使用的是第0个分区。
2025-04-24 15:47:00
5553
1
原创 【uboot1】启动流程,环境变量,内存,SSPRST
在U-Boot的配置文件(例如:mx6ull_14x14_evk_deconfig)中定义CONFIG_OF_CONTROL=y时,将采用设备树的方式来提供驱动数据,fdtdec_setup()函数位于/lib/fdtdec.c中通过设置全局变量gd->fdt_blob的值,设置设备树的存放地址为u-boot的末尾(通过对比编译生成的u-boot.bin和u-boot-nodtb.bin也可以看到在u-boot.bin的末尾增加了设备树文件)。一个新的SD卡默认只有一个分区,那就是分区0。
2025-03-31 20:43:53
1035
原创 【net2】mii,mdio,ncsi,bond,vlan,dns,ipv6
驱动入口module_init(bonding_init),bonding_init函数调用register_pernet_subsys(&bond_net_ops)绑定方法,bond_net_ops 结构体中 .init = bond_net_init,创建proc文件(在/proc/net目录),创建sysfs文件(在/sys/class/net目录)。phy芯片支持边缘和中央对齐,但如下bmc芯片中:rgmii千兆时钟是125MHZ,时钟周期是1/125=8ns,RX只支持边缘对齐。
2025-03-12 19:52:25
685
原创 【net1】tcp,route,iptables,macvlan,网卡rename
Hash散列算法(应用于哈希表和摘要密码学),是把任意长度的输入通过特定的算法变换成固定长度的输出,输出的值就是hash值。这个特定的算法就叫hash算法,hash算法并不是一个固定不变的算法。只要是能达到这个目的的算法都可以说hash算法。例如MD5,SHA,String.hashcode()都是hash算法。不同的输入可能会得出相同的hash值,那么这种现象称为hash碰撞,无论是采用那种hash算法,hash碰撞都是不可避免的,我们只能通过改进hash算法,把出现碰撞的概率降低。
2025-03-12 19:42:33
1838
1
原创 【kernel9】i2c协议,smbus,设备添加
如下出现了dts之后,为了去耦合,将这些的板级信息全部都定义在设备树(arch/arm/boots/dts),linux在启动uboot的时会自动展开dts上的硬件信息,自动调用i2c_register_board_info函数将设备注册进设备链表中,如下第2组总线地址0x01c…发送I2C设备地址,每个I2C器件都有一个设备地址,通过发送具体的设备地址来决定访问哪个I2C器件。这是一个8位的数据,其中高7位是设备地址,最后1位(设备地址不用管)是读写位。主机发送要读取的I2C从设备地址。
2024-11-11 00:11:09
1211
原创 【kernel8】spi协议,验证,模型,设备树处理,spidev,衍生协议
如下7位地址码不同的排列组合就有2的7次方=128种,正好访问存储器的128个字节。如下第一行是不是休眠唤醒,pdev->id是3,mode_bit默认都是0,需不需要填充,set_cs下面都是函数的回调函数,个字节(不是FF十进制255个字节),每个字节都有属于自己的地址,那怎么读取这1024位数据呢?下面dtsi描述的就是spi控制器,控制器也是驱动,一旦status设为ok,则用default,pinctrl-0。如下解析内存相关,获取设备树的reg,再做ioremap。波形是由spi控制器拉出。
2024-10-31 15:14:33
721
1
原创 【kernel7】pcie
如下是pci3.0规范:一开始配置(如读addr空间)时,怎样才能选中哪个设备去配置?如上一个设备就被配置好了地址和范围写入下面reg,程序就能像访问内存一样访问pci设备。主机即pci驱动程序初始化会扫描设备即读出配置寄存器,知道了是某类型寄存器和想申请多大空间。所以先配置pci设备后就可像内存一样读写。一个pci设备最多有8种功能,每种功能都有256字节的配置寄存器,怎样选中某一种功能,再怎么选中功能里哪一个寄存器?如下配置bridge:IDSEL后读headtype寄存器是1后,则发type1命令。
2024-10-15 13:35:32
523
原创 【kernel6】gpio,文件io,输入子系统,spi,usb,磁盘缓存,平均负载,fdisk,usb
当调用read,系统调用从文件中读取一些字节时,linux内核除了读取指定字节数据外,还会额外预读取一些数据到内核的缓存区里,下次再读取文件内容时,会先从内核缓存区里查找,如果找到,则省去等待慢磁盘定位和数据传输时间,大多数linux系统中预读取数据长度为128kb,也可根据系统可用的内存大小进行动态调整。写入文件内容时,函数将数据回写到内核缓冲区后才进行返回,(read,wtite)内核在稍后一段时间内才会将内容写入磁盘中,除了更新文件内容外,还会更新元数据(文件大小,文件最后修改的时间)。
2024-10-15 13:34:52
312
原创 【kernel5】kobject,platform总线,led
当调用read,系统调用从文件中读取一些字节时,linux内核除了读取指定字节数据外,还会额外预读取一些数据到内核的缓存区里,下次再读取文件内容时,会先从内核缓存区里查找,如果找到,则省去等待慢磁盘定位和数据传输时间,大多数linux系统中预读取数据长度为128kb,也可根据系统可用的内存大小进行动态调整。写入文件内容时,函数将数据回写到内核缓冲区后才进行返回,(read,wtite)内核在稍后一段时间内才会将内容写入磁盘中,除了更新文件内容外,还会更新元数据(文件大小,文件最后修改的时间)。
2024-10-15 13:34:22
639
原创 【kernel4】调试:调用堆栈函数,printk,动态打印,top,dstat,perf,ftrace,proc,debugfs,性能优化,内存泄漏,主频,驱动稳定性
printk会关中断影响性能,如果在usb的read/write里printk,那么usb就没法直接用了。我想加很多调试信息,但是不想影响linux性能,所以用动态打印,调试时才打开,control节点默认不输出,如下操作才输出,+p是转为printk。likely一般用在if判断里,cpu会把当前指令后面指令预取出来,等到执行时就去执行,效率提高,但是也要判断后面那条指令大概率执不执行,执行的话取出来,不执行则跳过。dmesg会显示不全,因为环形buffer会覆盖。如下案例:mpstat,perf。
2024-10-14 10:53:37
768
原创 【kernel3】proc文件系统,内存分配,数据类型/移植/对齐,内核中断,通过IO内存访问外设
【这种情况多数发生在中断处理上,当一个中断发生后,在中断回调函数中希望尽可能短和尽可能快执行,所以把那些费时间的,不是很紧要的任务放稍后执行即放在中断回调函数后执行】。rmmod就没有/proc/下接口了,"hello proc"有11个字符(连空格和换行符),所以show next调用了11次。非延迟工作队列效果跟tasklet类似,把API换成没有delayed的即可。如下delta连1次jiffies值都没达到。再去执行其他操作,可使用。执行指定操作,可使用。
2024-10-14 10:51:27
2154
1
原创 【kernel2】ioctl,进程休眠,时间和延时,延缓
文章目录1.实现设备读写:write函数中一个进程写没问题,两进程写:第一个进程运行到kzalloc时,第二个进程也执行了kzalloc,只第二个进程地址保存在c中,第一个进程分配内存空间地址丢失造成内存泄漏。第一个进程运行到kzalloc时第二个进程调用了kfree,这时第一个进程执行到copy_from_user出现问题2.同步和互斥:避免多进程同时操作设备问题3.实现设备驱动的ioctl函数: nr=number3.1 hello_chr_locked.h:ioctl的第二个参数即cmd即HC_IOC
2024-10-14 10:45:57
560
原创 【kernel1】内核模块,设备号,字符驱动,设备读写,同步和互斥
udev接到这事件后就会获取这些设备信息,这些信息大部分保存在/sys/class/xx文件系统(sysfs)中。udev获得到这些信息后就会根据获得到的信息以及udev规则在/dev下生成对应设备节点。linux系统中有一个后台程序udev(用来自动生成设备节点的软件),设备文件->设备号->cdev。如下次设备号个数不是次设备号(hello_minor)。如下测试读写设备,group改变组,mode改变权限。如下static int…只是初始化给默认值。
2024-10-14 10:45:20
2279
4
原创 【shell1】语法,i2ctransfer,expect,环境变量
如果字符串中有空格,必须需要使用引号(str=hello world会报错)。。:显示字符串第1到第4个字符。:从左边第4个字符开始,一直到结束。:从倒数第6个字符开始的3个字符。:从倒数第6个字符开始,一直到结束。
2024-10-14 10:25:21
3720
1
原创 【c/c++2】类和对象,vector容器,类继承和多态,信号,socket,systemd,std&boost
文章目录1.函数重载:writetofile(),C++true和false,C0和非02.类和对象:vprintf3.引用:别名4.string类:string str,str=,str.c_str()5.vector容器:std::vector<.>.;1.函数重载:writetofile(),C++true和false,C0和非0C++动态内存分配:在C语言中,动态分配内存用malloc()函数,释放内存用free()函数。C++中new和delete。C++函数重载:C中不允许函
2024-06-24 00:03:06
3465
1
原创 【c/c++1】数据类型/指针/结构体,static/extern/makefile,文件/多线程/动静态库
文章目录1.数据类型:单双引号,char(1B),int(4B),double(8B)2.常量和变量:memset,const3.输入和输出:scanf函数4.运算符:前先加1,sizeof5.if:上下,else if6.switch:选择结构7.循环:continue8.数组:存数据类型相同的数据,\0,数组下标越界导致core dump段错误9.库函数:/usr/include,libgcc.a10.指针:变量的地址,&,空指针段错误10.1 p是地址,*p是指向的内容:01指0x01(十六进
2024-06-23 21:54:21
3628
1
原创 【notes1】linux命令,samba服务器,pip,并发,IO,内存
apt install python3-pip --fix-missing(断开vpn,cp /etc/apt/sources.list /etc/apt/sources.list.bak,python3 -m pip install --upgrade pip,apt-get update,pip install 包名 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com)如下设置win账号,因为默认禁止空密码登录。
2024-06-23 20:32:07
4259
3
原创 【jenkins1】gitlab与jenkins集成
GitLab配置Access Token,用于jenkins连接GitLab获取GitLab API接口:点击右上角用户头像Edit profile,再点击左侧Access Tokens ,命名为gitlab_jenkins,Select scopes全部勾选上,点击创建产生如下字符串。官网https://www.jenkins.io/下载jenkins,可选择适合你自己系统的版本,也可选择不依赖于系统的docker(前提本机安装了docker)或war包(本机安装了java),如下开启。
2024-06-23 20:28:54
3782
原创 【docker1】指令,docker-compose,Dockerfile
文章目录1.pull/image,run/ps(进程),exec/commit2.save/load3.docker-compose3.1 link3.2 docker-compose .yml4.Dockerfile4.1 ENV4.2 LABEL5.k8s5.1.整个流程5.2 三个基础概念5.3 service之间如何互相通信5.4 service的虚拟ip到公网ip1.pull/image,run/ps(进程),exec/commitDocker是主要应用于linux和后台应用的虚拟机(和vm
2024-06-23 20:28:45
5249
1
原创 【git1】指令,commit,免密
硬还原前面回滚掉的版本,commithash因为被回滚掉了,用git log 空(每次提交commit信息)查不到,用git reflog 空(所有操作信息)查,三个区都回滚了保持一致。一般不用git commit -m,直接git commit进入vi界面(进入前要git config core.editor vim设一下vi模式),vi如下写法,注意在最上面写。(会出现Auto-merging自动合并,git pull = git fetch + git merge),进行讨论删除,再。
2024-06-23 20:28:38
2831
1
原创 【database1】mysql,redis
1.3.小结果集适合建索引。如果占表超过50%不适合建索引,因为数据量达到一定量后会走全表扫描:原因是mysql内部有一个优化器进行最优策略即聚集索引和非聚集索引查询原理,数据量太大会先走非聚集索引,然后才走聚集索引获取数据。太频繁加个redis。4.有limit 1,查到一行就不继续往下走。5.数据库创建完一次连接后会永久处于连接状态,已经永久连接了,apache还给数据库不断发连接,给数据库增加了压力,大公司会解决这个。6.
2024-06-23 20:26:44
1315
1
原创 【web1】标签,css,js,vue
File-New-Project-Static Web,右击New-HTMLFile。1.2 文本标签:字体属性1.3 a标签:anchor(锚) 超链接1.4 列表标签:list (嵌套)1.6 标签分类:div,span1.7 表格标签:快捷键,table(嵌套)1.8 合并单元格:rowspan=“2”百度服务器不会理你。2.4 css属性:背景/文本/字体/边框/浮动/展示如下7是接着6后面,看浏览器窗口大小,动态调整。
2024-06-23 20:25:37
2461
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人