Kernel编译和替换(Ubuntu)

Kernel编译和替换(Ubuntu)

原文链接:https://ovea-y.cn/kernel_compilation_and_replacement_ubuntu/

Flowchart

下载源代码

apt install linux-source

位置在/usr/src中

也可以直接去kernel.org下载最新的源码

解压后别忘记拷贝依赖。

cd /usr/src/linux-source-5.19.0/
tar -xvf linux-source-5.19.0.tar.bz2
cp -r debian linux-source-5.19.0/
cp -r debian.master/ linux-source-5.19.0/

安装依赖

apt install build-essential 
apt install gcc 
apt install make 
apt install openssl 
apt install pkg-config 
apt install libssl-dev 
apt install libncurses5-dev 
apt install libc6-dev 
apt install libelf-dev
apt install bison
apt install flex
apt install llvm
apt install clang
apt install lldb

配置构建配置

  1. 进入源码路径

cd /usr/src/linux-xxxx

  1. 拷贝当前kernel的配置信息

cp /boot/config-xxxxx .config

为了提供一个和当前Kernel相同的配置清单

  1. 选择其他功能

此处可以选择开启或关闭Kernel功能

make menuconfig-->load-->save

内核编译

make -j8

编译模块

make modules -j8

安装模块

make INSTALL_MOD_STRIP=1 modules_install -j8

这里的INSTALL_MOD_STRIP=1一定要加上,否则会有initrd.img-xxx文件太大的问题,导致开机一直卡在加载映像到磁盘,无法开机。

安装内核

make install

检查以下/boot/initrd.img-xxx大小是否太大,正常一般不超过100M,如果太大就执行[安装模块]的命令,然后在执行:

mkinitramfs /lib/modules/6.19.xxxx/ -o /boot/initrd.img-6.19xxx

更新grub引导

update-grub2

注意这里grub会默认选择最新版本的内核,如果更新内核后需要切换到旧版本的内核,需要在启动的过程中选择ubuntu高级选项里边选择之前的版本,如果开机不显示ubuntu高级选项,可以修改/etc/default/grub文件:

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'
 
GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=menu // 修改为menu
GRUB_TIMEOUT=5  // 修改超时时间为5秒

......

检测是否成功

重启电脑,然后用uname -a检测是否替换成功

比如原来的特征是

Linux ovea1 5.19.0-26-generic #27-Ubuntu SMP PREEMPT_DYNAMIC Wed Nov 23 20:49:05 UTC 2022 aarch64 aarch64 aarch64 GNU/Linux

替换后变成了

Linux ovea 5.19.7 #1 SMP PREEMPT_DYNAMIC Sun Jan 1 15:30:43 UTC 2023 aarch64 aarch64 aarch64 GNU/Linux

清理构建的产物

make clean

Ubuntu 6.14.0内核版本的处理方式

附加环境构建依赖

apt install libdwarf-dev
apt install libdw-dev libelf-dev
echo 'export HOSTCFLAGS="-I/usr/include/libdwarf"' >> ~/.bashrc
source ~/.bashrc

下载Linux源码的方式

其他部分参考这里:https://wiki.ubuntu.com/Kernel/BuildYourOwnKernel

cat /etc/lsb-release
# 这里输出的DISTRIB_CODENAME需要使用
vim /etc/apt/sources.list
deb-src http://archive.ubuntu.com/ubuntu {DISTRIB_CODENAME} main
deb-src http://archive.ubuntu.com/ubuntu {DISTRIB_CODENAME}-updates main
apt update
apt build-dep linux linux-image-unsigned-$(uname -r)
apt install libncurses-dev gawk flex bison openssl libssl-dev dkms libelf-dev libudev-dev libpci-dev libiberty-dev autoconf llvm
apt install git
apt source linux-image-unsigned-$(uname -r)

参考

https://blog.csdn.net/mabin2005/article/details/123350651

原文链接:https://ovea-y.cn/kernel_compilation_and_replacement_ubuntu/

Read more

香港银行开户指南

香港银行开户指南

注意:本文所有内容,都是需要前往香港的情况下才能使用! 本文主要介绍2家实体银行和3家虚拟银行! 实体银行包含: * 中国银行(香港) * 汇丰银行(香港),该银行也被称为“香港上海汇丰银行” 虚拟银行包含: * 众安银行 * 天星银行 * 蚂蚁银行 1、各银行所需资料和办理方式 银行名称 办理方式 所需材料 & 要求 备注 汇丰银行(香港) 提前预约,线下到营业点办理 (如果没预约,只能很早排队取线下号,不一定能取到) 必备证件: 1. 港澳通行证 2. 入境海关小票 3. 身份证 投资证明: 1. 证券App近三月股票交割单 2. 中国结算近三月交割单 3. 银行近三月流水单 4. 支付宝投资流水 资产证明: 1. 银行资产证明 2.

By 夕元
C++协程(Coroutines)

C++协程(Coroutines)

原文链接:https://ovea-y.cn/cpp_coroutine_20/ C++协程(Coroutines) 1. 简单介绍协程 协程可以简单的理解为,它是一个可以随时“中断”,并再次恢复执行的函数。 C++协程框架的特点: * 无栈协程 * 非对称设计(开发者可以自行设计协程调度器,做成对称设计) 2. 协程和函数的区别 函数:函数调用是线性、同步、一次性的执行模式,调用者必须等待被调用方法执行完成后返回。 协程:协程可以异步执行,调用者不需要等待协程完成,可以在协程挂起时继续做其他事情。在执行过程中通过特定的语法(co__yield_和_co__await)暂停执行,并在之后的某个时刻恢复执行。 2.1 普通函数的执行过程 一个普通函数在执行的时候,主要包含两个操作,分别是调用(call)和返回(return)

By 夕元
GitHub Workflows

GitHub Workflows

原文链接:https://ovea-y.cn/github_workflows/ 本文介绍GitHub工作流的创建和作用。 工作流创建方式 在git项目下,创建.github/workflows文件夹,里面编写的任何yml文件都是工作流的一部分。 secrets的创建方式 secrets.GITHUB_TOKEN是GitHub自动创建的,不需要自己创建。 secrets.SERVER_HOST这个的来源,需要在GitHub对应的项目的设置中设置。 readme的构建标签 配置好Branch、Event类型后,把下面这段内容复制到markdown文档里,就会自动显示自动化流程状态了。其实就是一张图片,由GitHub自动生成提供。 一. 自动构建网站并推送到远程服务器 自动构建hugo,并更新远程服务器的静态网站内容。 自动化流程文件 name: Deploy Hugo Site # 当推送到main分支时触发部署流程 on: push: branches: - main

By 夕元
代码版本管理工具(git/gerrit/repo)

代码版本管理工具(git/gerrit/repo)

原文链接:https://ovea-y.cn/code_version_control_tools__git_gerrit_repo/ 一、版本控制工具的历史 1.1 版本控制雏形 在版本控制软件出现之前,就具备diff与patch工具来对源码进行比较和打补丁了,在CVS出来的一段时间里,Linus一直在使用diff与patch工具管理着Linux的代码。diff与patch也是源码版本控制中最基本的概念。 1.1.1 diff —— 用于比较两个文件或目录之间的差异 -u 表示使用 unified 格式 -r 表示比较目录 -N 表示将不存在的文件当作空文件处理,这样新添加的文件也会出现在patch文件中 diff -urN a.c b.c > c.patch 1.1.2 patch —— 用于应用差异修改 通过patch可以将原始文件变成目标文件,

By 夕元