编译EulerOS/openEuler 内核方法,以修改pagesize 64K为例

举报
阿奇@汪汪队 发表于 2020/03/19 21:21:32 2020/03/19
2.4w+ 8 0
【摘要】 编译EulerOS/openEuler 内核方法,以修改pagesize 64K为例

步骤说明:

Pagesize是内核参数,需要修改内核重新编译,然后运行新内核即可。

利用getconf PAGESIZE可以查看当前系统页大小,4096为4K,65536为64K。华为鲲鹏云虚拟机用的是EulerOS,默认页大小是4K,其他操作系统有可能默认就是64K,修改之前要确认好。

[root@test ~]#getconf PAGESIZE

4096

(1) 修改内核参数编译内核

1. 这里采用Euler编译环境方式,先下载Euler_compile_env.tar.gz。外部联系华为技术支持提供。内部推荐在CMC上对应版本下载,wget会很慢。

这里以EulerOS Server V200R008C00B380 版本为例:

https://cmc-szv.clouddragon.huawei.com/cmcversion/index/componentVersionView?deltaId=14525855

1584623944645368.png

同时下载kernel源码包kernel-source-4.19.36-vhulk1907.1.0.h434.eulerosv2r8.aarch64.rpm,里面是发布的内核源码。

1584623957683376.png

2. 解压编译环境

tar -xzvf Euler_compile_env.tar.gz

解压完成以后,进入Euler_compile_env目录,新建myComp目录。将内核源码包kernel-source-4.19.36-vhulk1907.1.0.h434.eulerosv2r8.aarch64.rpm放到此目录解压。

[root@test ~]#cd Euler_compile_env

[root@test ~]#mkdir myComp

[root@test ~]#cp your/rpm/path/kernel-source-4.19.36-vhulk1907.1.0.h434.eulerosv2r8.aarch64.rpm myComp

[root@test ~]#cd myComp

[root@test ~]#rpm2cpio kernel-source-4.19.36-vhulk1907.1.0.h434.eulerosv2r8.aarch64.rpm | cpio divm

 

3. 进入chroot环境(必须使用root账户)

[root@test ~]# cd Euler_compile_env/

[root@test Euler_compile_env]# sh chroot.sh

4. 进入内核源码树

test:/ # cd myComp/usr/src/kernels/linux-4.19.36-vhulk1907.1.0.h434.eulerosv2r8.aarch64/

5. 拷贝配置文件

cp /lib/modules/4.19.36-vhulk1907.1.0.h430.eulerosv2r8.aarch64/build/Makefile .

cp /lib/modules/4.19.36-vhulk1907.1.0.h430.eulerosv2r8.aarch64/build/.config .

6. 修改.config

修改.config文件的CONFIG_MODULE_SIG_KEY选项为:CONFIG_MODULE_SIG_KEY="certs/signing_key.pem"

7. 修改pagesize为64K,执行make menuconfig,弹出图形化面板,选择Kernel Features-->Page size(64KB)设置为64K。

8. 并发编译内核rpm, 并发线程数可根据环境的cpu核数指定

make rpm-pkg –j8

9. 编译成功,在编译环境目录搜索rpm即可找到新编译的内核。

10. 如果获取不到配套的内核编译环境,使用一个最近的编译环境也是可以的,将内核补丁仓下载到编译环境中直接编译pkg即可。

(2) 设置新内核启动

1.  安装上面编译的内核rpm包,命令:rpm -ivh XXXX.rpm

2.  修改启动项选项

vi /boot/efi/EFI/euleros/grub.cfg

要检查刚安装的内核是不是系统优先启动的,如果不是要设置成优先启动。一般来说是默认启动,新安装的内核信息会放在第一个:

1584623973827409.png

可以强行启动内核的序号,如修改:set default=“0”【注意:测试完成要改回原样】

1584624006753559.png

 

3.  重新OS,注意时间可能有点长,内核需要重新分配页,第二次就好了。

4.  系统启动后,检查getconf PAGESIZE,如果是65536表示修改OK。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(8

抱歉,系统识别当前为高风险访问,暂不支持该操作
  • 作者头像

    leedy2020/06/01 08:36:201楼举报回复

    编译报错可以找谁支持下啊
    In file included from ./include/linux/gfp.h:6:0,
                     from ./include/linux/mm.h:11,
                     from arch/arm64/kernel/asm-offsets.c:23:
    ./include/linux/mmzone.h:1093:2: error: #error Allocator MAX_ORDER exceeds SECTION_SIZE
     #error Allocator MAX_ORDER exceeds SECTION_SIZE
      ^~~~~
    • 作者头像

      leedy2020/06/01 12:40:12举报回复

      ./include/linux/mmzone.h:1093:2  这个位置有个编译宏,如果(MAX_ORDER - 1 + PAGE_SHIFT) > SECTION_SIZE_BITS 就报错;改成64K后这个宏就生效了,所以编译直接报错。   把这个编译宏注释掉就可以编译通过,有没有其他影响暂时还不知道。
    • 作者头像

      leedy2020/06/10 09:49:32举报回复

      @leedy 注释掉编译宏,可以编译通过,但是编出来的内核不能用,起不来。
    • 作者头像

      leedy2020/06/10 09:52:21举报回复

      @leedy 正确的解决方法是不注释编译宏,make menuconfig打开编辑界面,拉到最下面选择EulerOS,然后把里面的“lvos_kmalloc take place kernel's kmalloc”选项去使能(选中后按空格健)
    • 展开更多回复
  • 作者头像

    小鲲鹏2020/07/18 01:12:402楼举报回复

    我外网进不去您发的这个链接怎么处理?
  • 作者头像

    yd_2115722172023/06/27 14:03:033楼举报回复

    回复 leedy:Euler V2R11 没有找到该选项呢,怎么破,强行修改 arch/arm64/Kconfig 中的 FORCE_MAX_ZONEORDER 又会触发别的校验失败

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。