jongwu3
码龄8年
  • 328,586
    被访问
  • 79
    原创
  • 9,973
    排名
  • 50
    粉丝
关注
提问 私信
  • 加入CSDN时间: 2014-06-19
博客简介:

wujianyongw4的博客

查看详细资料
  • 3
    领奖
    总分 356 当月 24
个人成就
  • 获得55次点赞
  • 内容获得44次评论
  • 获得273次收藏
创作历程
  • 5篇
    2022年
  • 19篇
    2021年
  • 17篇
    2020年
  • 21篇
    2019年
  • 37篇
    2018年
  • 16篇
    2017年
  • 1篇
    2016年
成就勋章
TA的专栏
  • linux
    59篇
  • docker
    11篇
  • 网络
    6篇
  • 编程
    11篇
  • 虚拟化
    35篇
  • 感悟
    1篇
  • ARM架构
    12篇
  • 其他
    5篇
兴趣领域 设置
  • 大数据
    flink
  • 人工智能
    语音识别机器学习深度学习神经网络自然语言处理tensorflowpytorchnlp
  • 最近
  • 文章
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

如何编译musl libc

在使用编译rust项目时如果需要musl-gcc编译可以会出现musl静态库找不到的情况,比如libseccomp.a。折腾很久才找到一个办法去手动编译musl静态库。编译musl静态库的难点在你需要一个完整的musl toolchin。 怎么在ubuntu上搭建这个环境我还没研究过,也怕吧gnu的环境搞坏,在我发现有些distro支持原生musl库这个问题就容易多了。alpine就是其中一个。起一个alpine的容器,然后在里面clone库的源码,正常编译即可。可能会遇到很多工具缺失的情况,goo
原创
发布博客 2022.05.17 ·
7 阅读 ·
0 点赞 ·
0 评论

基于arm64的linux kernel cpu 初始化分析

从start_kernel开始分析init/main.cstart_kernel | smp_setup_processor_id | setup_arch | setup_nr_cpu_ids | setup_per_cpu_areas | smp_prepare_boot_cpu | boot_cpu_hotplug_init | arch_call_rest_init
原创
发布博客 2022.04.08 ·
141 阅读 ·
0 点赞 ·
0 评论

qemu monitor qom-get 获取device property

加上-monitor unix:qemu-monitor-socket,server,nowait启动qemu,从另一个shell进入monitor。info qom-tree可以看到所有的device以qom格式展示。通过qom-get可以得到对应设备的指定propoty。info qom-tree大概长这个样子:(qemu) info qom-treeinfo qom-tree/machine (virt-6.2-machine) /device-memory[0] (memory-r
原创
发布博客 2022.03.25 ·
1009 阅读 ·
0 点赞 ·
0 评论

在arm64上基于qemu的vhost user blk设备hotplug

在kata中,vhost user blk设备是hotplug进去的。本文记录一下如果在qemu中hotplug一个vhost user blk设备。首先准备一个设备,以spdk设备为例。build spdkgit clone https://github.com/spdk/spdk.gitcd spdk; ./configure; make -j `nproc`制作vhost user blkmkdir -p block/socketsbuild/bin/spdk_tgt -
原创
发布博客 2022.03.19 ·
989 阅读 ·
0 点赞 ·
0 评论

挂载qcow2 image

如何挂载qcow2镜像
翻译
发布博客 2022.02.14 ·
41 阅读 ·
0 点赞 ·
0 评论

如何给用containerd启动的kata容器添加网络

如果直接用ctr创建容器,那么容器内部是没有网络的。这是因为containerd属于CRI模块,网络是由CNI组件去完成的,因此要想有网先要搞定cni。好消息是已经有个非常好的工具可以像docker一样使用containerd的service启动有网络的容器。这就是nerdctl, 使用方法参见https://github.com/containerd/nerdctl可惜这个工具虽好但是对kata容器支持的不够完善,只能启动kata但是却没有给kata容器建立网络。我发现一个办法可以给kata添加网
原创
发布博客 2021.10.27 ·
152 阅读 ·
1 点赞 ·
0 评论

kexec如何绕过virtio_mem热插拔的内存

virtio_mem是kernel的新feature,以virtio设备的形式给虚拟机热插拔内存。kexec是可以在当前系统上替换运行kernel的feature。当虚拟机中通过virtio_mem添加内存后再通过kexec去替换现有的kernel可能会产生一些意想不到的问题。因此需要让kexec避免使用这段新添加的内存。kexec有多种形式。主要是kexec_load和kexec_file_load两种。在第一中形式中,kexec会通过扫描/proc/iomem来准备new kernel的内存,通
原创
发布博客 2021.10.27 ·
69 阅读 ·
0 点赞 ·
0 评论

ubuntu启动进入grub shell的修复办法

有时候ubuntu启动会进入grub界面,即便能手动进入系统重启可能还是会进入grub。这里有一个办法可以fix这个问题。首先要进入grub,这里有个简单的办法:grub> configfile ($root)/EFI/GRUB/grub.cfg如果这个办法不行,就按下面的办法:#ls查看硬盘分区grub> ls#比如root分区时hd0,gpt1grub> set root=hd0,gpt1grub> set prefix=(hd0,gpt1)/boot
原创
发布博客 2021.09.07 ·
623 阅读 ·
0 点赞 ·
0 评论

musl工具链下载地址

https://musl.cc/
原创
发布博客 2021.08.11 ·
145 阅读 ·
0 点赞 ·
0 评论

rust交叉编译

目标: 在linux x86_64环境编译arm64的bin环境:ubuntu 20.04的容器环境,arch为x86_64安装rust环境curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh#设置环境变量echo "PATH=$PATH:/root/.cargo" >> /root/.bashrc. /root/.bashrc新建rust项目cargo new hello; cd hello
原创
发布博客 2021.08.11 ·
287 阅读 ·
0 点赞 ·
0 评论

Job for xx.service Canceled的解决办法

在使用systemd来控制service状态时比如systemctl stop xx,有时候会出现:Job for xxcanceled这是systemd中打出的错误,源码在https://github.com/systemd/systemd/blob/d61ee727f037ab4e07af720ab34055e9cafe9cec/src/shared/bus-wait-for-jobs.c#L238systemd中对这种情形的解释是:Job canceled by a conflictin.
原创
发布博客 2021.07.07 ·
1093 阅读 ·
0 点赞 ·
0 评论

Linux slab分配器笔记

伙伴系统是面向大块内存请求,基本单位是page。对于小块内存的分配,slab是比较常用的分配器。首先要明确,slab分配器也是建立在伙伴系统之上的。最常用的分配函数kmalloc,入参size是以字节为单位的,它就是利用slab分配器实现的。slab有两个重要的优点:一是可以分配小块内存,二是可以加快内存分配。这跟它的实现原理有关。slab简单来讲就是首先在伙伴系统的基础上分配出一批大小相同的内存块,这些内存块一般是某个常用的数据结构,然后把这些内存块缓存起来,等到需要的时候就直接分配出来,无需再经
原创
发布博客 2021.07.06 ·
23 阅读 ·
0 点赞 ·
0 评论

linux 基于伙伴系统的内存分配笔记

上一篇记录了伙伴系统的组织结构,这一篇记录一下基于伙伴系统的具体分配策略。一、分配接口alloc_pages(gfp_tgfp_mask,unsignedintorder)
原创
发布博客 2021.06.30 ·
55 阅读 ·
1 点赞 ·
1 评论

GIC ITS在snapshot之后的恢复顺序

snapshot是VMM的一个特性。原理是将处于某个节点运行的VM stop并保存所有内存和寄存器的状态,然后在恢复运行时再将所有上下文restore到相应的寄存器中。本文基于kernel文档记录一下GIC ITS的恢复顺序。在kernel文档virt/kvm/devices/arm-vgic-its.rst的记录中,对gic its的恢复顺序如下:1、恢复所有客户机内存并创建vcpu;2、恢复所有gicr_*寄存器;3、提供ITS的基地址;4、恢复ITS: a、恢复...
原创
发布博客 2021.06.27 ·
26 阅读 ·
0 点赞 ·
0 评论

linux 伙伴系统内存组织笔记

上一篇记录了伙伴系统的初始化,这里记录一下伙伴系统工作原理。伙伴系统(buddy system)是内存管理的基础,很多内存分配接口底层都是伙伴系统。比如常见的kmalloc。
原创
发布博客 2021.06.16 ·
46 阅读 ·
0 点赞 ·
2 评论

Linux伙伴系统初始化

上一篇文章记述了node和zone初始化的基本流程。本篇记录一下伙伴系统初始化。linux内存初始化:asmlinkage __visible void __init __no_sanitize_address start_kernel(void){ ... //跟架构相关,zone,node初始化 setup_arch(&command_line); ... //zonelists 初始化 build_all_zonelists(NULL); page_al
原创
发布博客 2021.06.15 ·
116 阅读 ·
0 点赞 ·
0 评论

linux内存初始化笔记

内存是计算机的重要的硬件资源。如果没有软件的管理,再多再快的内存也只是摆设。在管理内存之初是对内存的初始化。本文基于内核源码和一些参考资料谈谈我的理解。硬件内存:
原创
发布博客 2021.06.14 ·
142 阅读 ·
0 点赞 ·
0 评论

git 如何重新切分commit

有时候对于已经完成的提交想要重新切分成多个commit。例如,新建三个文件1 2 3,然后一起提交。commit e8772b47bbd60c8fbfec2652da6501e5b6442fdc (HEAD -> master)Author: xxx <xx.xx@xx.com>Date: Wed Apr 21 13:24:08 2021 +0800 new file 1 2 3现在我不像让他们一起提交了,我想单个文件提交。这时候用git reset --
原创
发布博客 2021.04.21 ·
116 阅读 ·
0 点赞 ·
0 评论

Linux上性能调试工具笔记

最近在看《性能之巅》,里面有很多有用的工具,记下来先。cpuuptime:可以显示1分钟、5分钟、15分钟的cpu平均负载。vmstat: 显示用户时间,系统时间,空间时间,等待io的cpu空间时间的平均数。mpstat: 显示每个cpu的统计信息,包括中断,上下文切换,锁等待,系统调用等的时间sar: ps: topprstat:pidstat:按进程或线程打印cpu使用量dtrace , perf都是很强大的工具,待续。。。...
原创
发布博客 2021.04.19 ·
27 阅读 ·
0 点赞 ·
0 评论

如何将机器码转换为汇编代码

在linux内核里面有很多脚本工具,位于linux/scripts/。里面有一个decodecode工具可以用来转换机器码,用法如下:比如有一行armv8的机器码:f2a800e8,将其翻译成汇编。:$ echo "f2a800e8" > code:$ ./decodecode < codeCode starting with the faulting instruction===========================================0: f2a8
原创
发布博客 2021.03.09 ·
1692 阅读 ·
0 点赞 ·
0 评论
加载更多