Ubuntu 18.04.04 Linux内核编译

Ubuntu18.04.04进行Linux内核编译记录

介绍

本次尝试使用linux的源码编译linux内核,并常识在屏幕上运行简单的c程序
最小系统
linux内核
看起来是急速的系统调用开发方式,但似乎不太详细
小型linux的参考
小型linux的参考,好似没有上面的全
以上是参考部分操作方式,由于参考多篇,且代码部分完全是自写的,就舔着脸标识原创了

make distclean
make gconfig
make kconfig
make menuconfig
make allyesconfig     #启用内核全部功能
make allnoconfig      #内核功能选项全部为否

只编译某子目录中的相关代码:
cd /usr/src/linux
make  path/to/dir/
只编译部分模块:
make M=path/to/dir
只编译一个模块:
make path/to/dir/MOD_NAME.ko
将编译生成的文件保存至别处:
make O=/path/to/somewhere

mkdir /path/to/somewhere               #创建存放目录
cd /path/to/somewhere                  #进入目录
./configure --ksource=/usr/src/linux   #指定源目录

	
make -j *         #*为cup核心数

 make clean       #清理编译的文件,但保留配置文件
 make mrproper    #移除所有编译生成的文件、配置文件和备份文件
 make distclean   #完全清理
 make modules_install	#安装模块

下载源码

建议在百度搜索清华源进行下载,也可以选择下面这个大学的下载。
传送门

下载完成之后进行解压:

  1. 可以直接使用桌面板程序进行解压,可以自行搜索tar命令进行解压。

编译开始

cd linux-5.7.9
make distclean
sudo apt install bison flex
make menuconfig
sudo apt-get install libncurses5-dev
make -j4
sudo cp arch/x86/boot/bzImage /boot
在任意目录新建
mkdir initramfs
cd initramfs
gedit init.c
#include <stdio.h>
int main() {
	printf("Hello World!\n");
	int true = 1;
	int input_data,number0,number1;
	char sign;
	while (true) {
		printf("please input some integer data:");
		scanf("%d", &input_data);
		printf("Input is %d\n", input_data);
		if (input_data == 2) {
			printf("你输入的是2\n");
		}else if (input_data == 1) {
			printf("Input 2 number and sign.\n");
			scanf("%d", &number0);
			scanf("%d", &number1);
			scanf("%s", &sign);
			if (sign == '+') {
				printf("%d\n", number0 + number1);
				printf("count end\n");
			}else {
				printf("some error\n");
			}
		}else if (input_data == 0) {
			break;
		}else{
			printf("Your input is %d\n", input_data);
		}
	}
	printf("shutdown 10s\n");
	for (int i = 1; i < 6; i++) {
		printf("%ds+ \n", i);
		sleep(1);
	}
	printf("end\n");
	return 0;
}
gcc --static -o init init.c
mkdir -p dev
sudo mknod dev/console c 5 1
find .|cpio -o -H newc|gzip -3 > ../initrd.img
sudo cp ../initrd.img /boot/

修改/boot/grub/grub.cfg

sudo /boot/grub/grub.cfg

即找到menuentry 'Ubuntu’在其后添加这个即可

menuentry 'Ubuntu bzImage' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-b5cc14de-6824-4a35-b0f7-44874cfb5563' {
	recordfail
	load_video
	gfxmode $linux_gfx_mode
	insmod gzio
	if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
	insmod part_gpt
	insmod ext2
	set root='hd1,gpt2'
	if [ x$feature_platform_search_hint = xy ]; then
	  search --no-floppy --fs-uuid --set=root --hint-bios=hd1,gpt2 --hint-efi=hd1,gpt2 --hint-baremetal=ahci1,gpt2  b5cc14de-6824-4a35-b0f7-44874cfb5563
	else
	  search --no-floppy --fs-uuid --set=root b5cc14de-6824-4a35-b0f7-44874cfb5563
	fi
        linux	/boot/bzImage root=UUID=b5cc14de-6824-4a35-b0f7-44874cfb5563 ro  quiet splash $vt_handoff
	initrd	/boot/initrd.img
}

现在重启你的系统,就可以看到多出一个Ubuntu bzImage的选项

sudo apt-get install gtk+-2.0 glib-2.0 libglade2-dev
上面用于make gconfig
下面用于make kconfig
sudo apt-get install libncurses5-dev libtinfo-dev 

后续还会继续折腾

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值