linux内核启动时添加打印日志并验证的方法

一、相关信息

内核版本:

5.0.1

方法名:pr_info();

添加位置:

linux-5.0.1/init# vim main.c

537 asmlinkage __visible void __init start_kernel(void)
 538 {
 539         pr_info("start_kernel\n");

 

linux-5.0.1/arch/x86# vim kernel/cpu/common.c

1135 void __init early_cpu_init(void)
1136 {
1137         pr_info("early_cpu_init:\n");

 

二、运行效果图:

 

三、验证过程

1、用U盘做一个grub linux的起动盘,网上有不少的操作指导,我用vmware装了一个ubuntu的操作系统,自带的有个grub,我用这个grub在U盘安装了引导扇区,然后直接把ubuntu的/boot目录拷贝到U盘了(这样就不存在版本不兼容问题),注意需要修改下UUID这个(U盘对应的),用命令行可以查到。开始我是按照网上说的把U盘分成两个区,死活不行,最后用一个区搞定的,不过操作步骤找不到了)(一个插曲,差点把U盘搞坏了,读不出来U盘,用U盘对应的修改复工具才修复,修复一次得三个小时,差点要了小命),制作grub起动U盘大概命令如下:
a.好像是先需要挂载下U盘到一个新创建的目录,然后执行如下 操作

b.root@localhost ~]# grub-install --root-directory=/media/disk --no-floppy /dev/sdb2
Probing devices to guess BIOS drives. This may take a long time.
Installation finished. No error reported.

(代码实际上是5.0.1),这是拷贝我装的ubuntu的内核的一些参数,配套把grub.cfg配置文件改下,下边是完整目录下的文件信息,U盘boot目录压缩包下载地址:https://download.csdn.net/download/r77683962/11743101

H:\boot
H:\1.txt
H:\boot\grub
H:\boot\memtest86+.bin
H:\boot\memtest86+.elf
H:\boot\memtest86+_multiboot.bin
H:\boot\config-5.0.0-13-generic
H:\boot\System.map-5.0.0-13-generic
H:\boot\initrd.img-5.0.0-13-generic
H:\boot\vmlinuz-5.0.0-13-generic

H:\boot\grub\i386-pc
H:\boot\grub\locale
H:\boot\grub\fonts
H:\boot\grub\grub.cfg
H:\boot\grub\grubenv
H:\boot\grub\gfxblacklist.txt
H:\boot\grub\unicode.pf2
H:\boot\grub\i386-pc\gfxmenu.mod
H:\boot\grub\i386-pc\xzio.mod
H:\boot\grub\i386-pc\trig.mod
H:\boot\grub\i386-pc\scsi.mod
H:\boot\grub\i386-pc\test_blockarg.mod
H:\boot\grub\i386-pc\odc.mod
H:\boot\grub\i386-pc\hexdump.mod
H:\boot\grub\i386-pc\gcry_md4.mod
H:\boot\grub\i386-pc\gcry_crc.mod
H:\boot\grub\i386-pc\dm_nv.mod
H:\boot\grub\i386-pc\png.mod
H:\boot\grub\i386-pc\gcry_blowfish.mod
H:\boot\grub\i386-pc\part_msdos.mod
H:\boot\grub\i386-pc\gcry_rmd160.mod
H:\boot\grub\i386-pc\usb.mod
H:\boot\grub\i386-pc\cat.mod
H:\boot\grub\i386-pc\ntldr.mod
H:\boot\grub\i386-pc\file.mod
H:\boot\grub\i386-pc\gcry_twofish.mod
H:\boot\grub\i386-pc\sleep.mod
H:\boot\grub\i386-pc\all_video.mod
H:\boot\grub\i386-pc\videotest_checksum.mod
H:\boot\grub\i386-pc\test.mod
H:\boot\grub\i386-pc\gcry_dsa.mod
H:\boot\grub\i386-pc\part_sunpc.mod
H:\boot\grub\i386-pc\drivemap.mod
H:\boot\grub\i386-pc\signature_test.mod
H:\boot\grub\i386-pc\acpi.mod
H:\boot\grub\i386-pc\macho.mod
H:\boot\grub\i386-pc\video_bochs.mod
H:\boot\grub\i386-pc\date.mod
H:\boot\grub\i386-pc\read.mod
H:\boot\grub\i386-pc\morse.mod
H:\boot\grub\i386-pc\bswap_test.mod
H:\boot\grub\i386-pc\part_amiga.mod
H:\boot\grub\i386-pc\echo.mod
H:\boot\grub\i386-pc\pxechain.mod
H:\boot\grub\i386-pc\plan9.mod
H:\boot\grub\i386-pc\halt.mod
H:\boot\grub\i386-pc\gcry_rijndael.mod
H:\boot\grub\i386-pc\part_plan.mod
H:\boot\grub\i386-pc\freedos.mod
H:\boot\grub\i386-pc\cmosdump.mod
H:\boot\grub\i386-pc\serial.mod
H:\boot\grub\i386-pc\pcidump.mod
H:\boot\grub\i386-pc\backtrace.mod
H:\boot\grub\i386-pc\multiboot.mod
H:\boot\grub\i386-pc\cryptodisk.mod
H:\boot\grub\i386-pc\ohci.mod
H:\boot\grub\i386-pc\cmostest.mod
H:\boot\grub\i386-pc\cmp_test.mod
H:\boot\grub\i386-pc\gfxterm_menu.mod
H:\boot\grub\i386-pc\usbserial_ftdi.mod
H:\boot\grub\i386-pc\tr.mod
H:\boot\grub\i386-pc\multiboot2.mod
H:\boot\grub\i386-pc\video_colors.mod
H:\boot\grub\i386-pc\archelp.mod
H:\boot\grub\i386-pc\msdospart.mod
H:\boot\grub\i386-pc\eval.mod
H:\boot\grub\i386-pc\xnu_uuid.mod
H:\boot\grub\i386-pc\spkmodem.mod
H:\boot\grub\i386-pc\gcry_rsa.mod
H:\boot\grub\i386-pc\lsacpi.mod
H:\boot\grub\i386-pc\procfs.mod
H:\boot\grub\i386-pc\bsd.mod
H:\boot\grub\i386-pc\loopback.mod
H:\boot\grub\i386-pc\usbserial_pl2303.mod
H:\boot\grub\i386-pc\boot.mod
H:\boot\grub\i386-pc\part_sun.mod
H:\boot\grub\i386-pc\net.mod
H:\boot\grub\i386-pc\minix3.mod
H:\boot\grub\i386-pc\sleep_test.mod
H:\boot\grub\i386-pc\search_fs_uuid.mod
H:\boot\grub\i386-pc\syslinuxcfg.mod
H:\boot\grub\i386-pc\xnu_uuid_test.mod
H:\boot\grub\i386-pc\video_cirrus.mod
H:\boot\grub\i386-pc\memrw.mod
H:\boot\grub\i386-pc\ehci.mod
H:\boot\grub\i386-pc\usb_keyboard.mod
H:\boot\grub\i386-pc\hdparm.mod
H:\boot\grub\i386-pc\gcry_sha256.mod
H:\boot\grub\i386-pc\elf.mod
H:\boot\grub\i386-pc\915resolution.mod
H:\boot\grub\i386-pc\efiemu.mod
H:\boot\grub\i386-pc\pbkdf2_test.mod
H:\boot\grub\i386-pc\raid6rec.mod
H:\boot\grub\i386-pc\functional_test.mod
H:\boot\grub\i386-pc\ctz_test.mod
H:\boot\grub\i386-pc\video.mod
H:\boot\grub\i386-pc\minix2_be.mod
H:\boot\grub\i386-pc\exfat.mod
H:\boot\grub\i386-pc\cpio_be.mod
H:\boot\grub\i386-pc\lzopio.mod
H:\boot\grub\i386-pc\btrfs.mod
H:\boot\grub\i386-pc\affs.mod
H:\boot\grub\i386-pc\cmp.mod
H:\boot\grub\i386-pc\minix3_be.mod
H:\boot\grub\i386-pc\cmdline_cat_test.mod
H:\boot\grub\i386-pc\lspci.mod
H:\boot\grub\i386-pc\setjmp.mod
H:\boot\grub\i386-pc\gptsync.mod
H:\boot\grub\i386-pc\usbserial_common.mod
H:\boot\grub\i386-pc\minix.mod
H:\boot\grub\i386-pc\help.mod
H:\boot\grub\i386-pc\xfs.mod
H:\boot\grub\i386-pc\part_acorn.mod
H:\boot\grub\i386-pc\adler32.mod
H:\boot\grub\i386-pc\gcry_tiger.mod
H:\boot\grub\i386-pc\squash4.mod
H:\boot\grub\i386-pc\lvm.mod
H:\boot\grub\i386-pc\hfspluscomp.mod
H:\boot\grub\i386-pc\search_fs_file.mod
H:\boot\grub\i386-pc\mda_text.mod
H:\boot\grub\i386-pc\minix2.mod
H:\boot\grub\i386-pc\sfs.mod
H:\boot\grub\i386-pc\gzio.mod
H:\boot\grub\i386-pc\usbserial_usbdebug.mod
H:\boot\grub\i386-pc\bufio.mod
H:\boot\grub\i386-pc\ata.mod
H:\boot\grub\i386-pc\search_label.mod
H:\boot\grub\i386-pc\verify.mod
H:\boot\grub\i386-pc\hashsum.mod
H:\boot\grub\i386-pc\loadenv.mod
H:\boot\grub\i386-pc\keystatus.mod
H:\boot\grub\i386-pc\usbtest.mod
H:\boot\grub\i386-pc\gcry_sha512.mod
H:\boot\grub\i386-pc\ext2.mod
H:\boot\grub\i386-pc\part_bsd.mod
H:\boot\grub\i386-pc\part_dvh.mod
H:\boot\grub\i386-pc\datetime.mod
H:\boot\grub\i386-pc\pxe.mod
H:\boot\grub\i386-pc\hfs.mod
H:\boot\grub\i386-pc\hfsplus.mod
H:\boot\grub\i386-pc\cbfs.mod
H:\boot\grub\i386-pc\gcry_cast5.mod
H:\boot\grub\i386-pc\true.mod
H:\boot\grub\i386-pc\lsapm.mod
H:\boot\grub\i386-pc\part_dfly.mod
H:\boot\grub\i386-pc\gcry_camellia.mod
H:\boot\grub\i386-pc\lsmmap.mod
H:\boot\grub\i386-pc\datehook.mod
H:\boot\grub\i386-pc\gcry_des.mod
H:\boot\grub\i386-pc\blocklist.mod
H:\boot\grub\i386-pc\ufs1_be.mod
H:\boot\grub\i386-pc\progress.mod
H:\boot\grub\i386-pc\romfs.mod
H:\boot\grub\i386-pc\gfxterm_background.mod
H:\boot\grub\i386-pc\newc.mod
H:\boot\grub\i386-pc\mmap.mod
H:\boot\grub\i386-pc\cs5536.mod
H:\boot\grub\i386-pc\gcry_md5.mod
H:\boot\grub\i386-pc\zfsinfo.mod
H:\boot\grub\i386-pc\uhci.mod
H:\boot\grub\i386-pc\fat.mod
H:\boot\grub\i386-pc\gfxterm.mod
H:\boot\grub\i386-pc\normal.mod
H:\boot\grub\i386-pc\ntfs.mod
H:\boot\grub\i386-pc\setpci.mod
H:\boot\grub\i386-pc\gcry_idea.mod
H:\boot\grub\i386-pc\hello.mod
H:\boot\grub\i386-pc\cbls.mod
H:\boot\grub\i386-pc\truecrypt.mod
H:\boot\grub\i386-pc\tftp.mod
H:\boot\grub\i386-pc\gcry_rfc2268.mod
H:\boot\grub\i386-pc\videotest.mod
H:\boot\grub\i386-pc\mpi.mod
H:\boot\grub\i386-pc\gcry_whirlpool.mod
H:\boot\grub\i386-pc\cbtime.mod
H:\boot\grub\i386-pc\mdraid09_be.mod
H:\boot\grub\i386-pc\ldm.mod
H:\boot\grub\i386-pc\random.mod
H:\boot\grub\i386-pc\testload.mod
H:\boot\grub\i386-pc\iso9660.mod
H:\boot\grub\i386-pc\hwmatch.mod
H:\boot\grub\i386-pc\reboot.mod
H:\boot\grub\i386-pc\extcmd.mod
H:\boot\grub\i386-pc\keylayouts.mod
H:\boot\grub\i386-pc\gettext.mod
H:\boot\grub\i386-pc\tar.mod
H:\boot\grub\i386-pc\password_pbkdf2.mod
H:\boot\grub\i386-pc\gdb.mod
H:\boot\grub\i386-pc\bfs.mod
H:\boot\grub\i386-pc\ntfscomp.mod
H:\boot\grub\i386-pc\ufs2.mod
H:\boot\grub\i386-pc\gcry_sha1.mod
H:\boot\grub\i386-pc\vga.mod
H:\boot\grub\i386-pc\mdraid09.mod
H:\boot\grub\i386-pc\terminal.mod
H:\boot\grub\i386-pc\part_gpt.mod
H:\boot\grub\i386-pc\videoinfo.mod
H:\boot\grub\i386-pc\http.mod
H:\boot\grub\i386-pc\play.mod
H:\boot\grub\i386-pc\jfs.mod
H:\boot\grub\i386-pc\font.mod
H:\boot\grub\i386-pc\linux16.mod
H:\boot\grub\i386-pc\cpuid.mod
H:\boot\grub\i386-pc\parttool.mod
H:\boot\grub\i386-pc\mul_test.mod
H:\boot\grub\i386-pc\usbms.mod
H:\boot\grub\i386-pc\luks.mod
H:\boot\grub\i386-pc\cbmemc.mod
H:\boot\grub\i386-pc\biosdisk.mod
H:\boot\grub\i386-pc\gcry_seed.mod
H:\boot\grub\i386-pc\legacy_password_test.mod
H:\boot\grub\i386-pc\udf.mod
H:\boot\grub\i386-pc\regexp.mod
H:\boot\grub\i386-pc\offsetio.mod
H:\boot\grub\i386-pc\div_test.mod
H:\boot\grub\i386-pc\part_apple.mod
H:\boot\grub\i386-pc\zfs.mod
H:\boot\grub\i386-pc\nativedisk.mod
H:\boot\grub\i386-pc\ahci.mod
H:\boot\grub\i386-pc\tga.mod
H:\boot\grub\i386-pc\aout.mod
H:\boot\grub\i386-pc\pata.mod
H:\boot\grub\i386-pc\gcry_serpent.mod
H:\boot\grub\i386-pc\reiserfs.mod
H:\boot\grub\i386-pc\pci.mod
H:\boot\grub\i386-pc\chain.mod
H:\boot\grub\i386-pc\vbe.mod
H:\boot\grub\i386-pc\pbkdf2.mod
H:\boot\grub\i386-pc\configfile.mod
H:\boot\grub\i386-pc\ufs1.mod
H:\boot\grub\i386-pc\exfctest.mod
H:\boot\grub\i386-pc\afs.mod
H:\boot\grub\i386-pc\vga_text.mod
H:\boot\grub\i386-pc\macbless.mod
H:\boot\grub\i386-pc\nilfs2.mod
H:\boot\grub\i386-pc\xnu.mod
H:\boot\grub\i386-pc\disk.mod
H:\boot\grub\i386-pc\bitmap.mod
H:\boot\grub\i386-pc\linux.mod
H:\boot\grub\i386-pc\diskfilter.mod
H:\boot\grub\i386-pc\minix_be.mod
H:\boot\grub\i386-pc\iorw.mod
H:\boot\grub\i386-pc\minicmd.mod
H:\boot\grub\i386-pc\fshelp.mod
H:\boot\grub\i386-pc\search.mod
H:\boot\grub\i386-pc\shift_test.mod
H:\boot\grub\i386-pc\cbtable.mod
H:\boot\grub\i386-pc\geli.mod
H:\boot\grub\i386-pc\probe.mod
H:\boot\grub\i386-pc\zfscrypt.mod
H:\boot\grub\i386-pc\legacycfg.mod
H:\boot\grub\i386-pc\video_fb.mod
H:\boot\grub\i386-pc\sendkey.mod
H:\boot\grub\i386-pc\ls.mod
H:\boot\grub\i386-pc\gcry_arcfour.mod
H:\boot\grub\i386-pc\password.mod
H:\boot\grub\i386-pc\at_keyboard.mod
H:\boot\grub\i386-pc\cpio.mod
H:\boot\grub\i386-pc\memdisk.mod
H:\boot\grub\i386-pc\mdraid1x.mod
H:\boot\grub\i386-pc\bitmap_scale.mod
H:\boot\grub\i386-pc\priority_queue.mod
H:\boot\grub\i386-pc\terminfo.mod
H:\boot\grub\i386-pc\div.mod
H:\boot\grub\i386-pc\crc64.mod
H:\boot\grub\i386-pc\crypto.mod
H:\boot\grub\i386-pc\setjmp_test.mod
H:\boot\grub\i386-pc\testspeed.mod
H:\boot\grub\i386-pc\raid5rec.mod
H:\boot\grub\i386-pc\jpeg.mod
H:\boot\grub\i386-pc\relocator.mod
H:\boot\grub\i386-pc\time.mod
H:\boot\grub\i386-pc\efiemu32.o
H:\boot\grub\i386-pc\efiemu64.o
H:\boot\grub\i386-pc\moddep.lst
H:\boot\grub\i386-pc\command.lst
H:\boot\grub\i386-pc\fs.lst
H:\boot\grub\i386-pc\partmap.lst
H:\boot\grub\i386-pc\parttool.lst
H:\boot\grub\i386-pc\video.lst
H:\boot\grub\i386-pc\crypto.lst
H:\boot\grub\i386-pc\terminal.lst
H:\boot\grub\i386-pc\modinfo.sh
H:\boot\grub\i386-pc\core.img
H:\boot\grub\i386-pc\boot.img
H:\boot\grub\locale\en_GB.mo
H:\boot\grub\locale\en_AU.mo
H:\boot\grub\locale\en_CA.mo
H:\boot\grub\locale\en@quot.mo
H:\boot\grub\fonts\unicode.pf2
H:\System Volume Information\IndexerVolumeGuid

 

不过我这边这个initrd.img这个包好像有点问题,就是特别大420+M,因为正常的操作系统带的initrd.img才四、五十M,不过功能倒是没啥问题,注意需要拷贝initrd.img-xxx和vmlinuz-xxx:

内核是如何编译的?下边这篇帖子有详细的操作步骤(如果是性能比较好的服务器,估计半个小时,如果硬件配置差一点的话,估计2个小时也能编译完成,这个博客里边示例是4.16.2的编译,其实基本都差不多的)

https://blog.csdn.net/r77683962/article/details/100046243

注意,我们如果需要进行多次编译,有一个比较简单的方法:

a.用vmware虚拟机在编译完成后新建一个快照,这样后续不需要重新编译,回到上次保存的快照继续编译很是方便:

b.linux内核编译完成后/usr/src/linux-5.0.1这个目录大小在20G的样子,需要编译的同学请注意磁盘空间的预留

c.修改代码需要注意,尽量别修改太底层的源代码(比如打印类的文件),修改底层代码会导致大面积重新编译很耗时间的;

d.linux内核支持增量编译,比如我做如下修改后编译:

linux-5.0.1/arch/x86# vim kernel/cpu/common.c

1135 void __init early_cpu_init(void)
1136 {
1137         pr_info("early_cpu_init:\n");

只需执行,如下三个步骤后,在boot目录就会生成initrd.img-xxx和vmlinuz

root@pekphicprcxxxxx:/usr/src/linux-5.0.1# make -j16
root@pekphicprcxxxxx:/usr/src/linux-5.0.1# make -j4  modules_install
root@pekphicprcxxxxx:/usr/src/linux-5.0.1# make -j4 install

然后把新生成的这两个文件拷贝到U盘的boot目录(如果名称跟grub的配置文件不对,需要修改正确)。

这时带我们修改代码编译后的内核启动U盘已经做好了,剩下的就是在电脑上启动验证:

这边我其实是碰到一个问题:

我06年的时候买了一个笔记本是康柏的,下边是用这个电脑拍的视频,还比较清晰;

(链接: https://pan.baidu.com/s/1TmfLQjwUb6f_NXmOstzioA 提取码: 2pc5 )

我用17年买的笔记本拍视频,发现拍不到内核起动,画面太快了,用手机也没有拍成功

(链接: https://pan.baidu.com/s/1tHXfd9I2-VSeebF7ir08YQ 提取码: a6zi )

首先需要配置U盘起动为最高优先级

有一个问题,就是内核起动像我们修改的 kernel/cpu/common.c和init/main.c文件里边添加的两行打印日志信息,这部分内核在起动的时估计在0.00几秒就执行完成了,我们肉眼直接看是不太现实的,因为画面是一闪而过的,那乍办?我是直接用手机录像的,最基本要求60帧/秒(对手机的性能是有点要求的):

把录出来的像先大概看下,看看大概啥时候到起动画面,然后再一帧一帧(注意,一般的播放器不太支持单帧播放,在网上搜索了一个播放器:叫影音风暴,注意安装后,图标是下图这个样子的,别搜错了)

在单帧播放的时候就能看到内核起动的详细信息了。

祝各位亲验证OK,另外,有问题可以给我留言~~

 

四、视频下载地址

 

链接: https://pan.baidu.com/s/1TmfLQjwUb6f_NXmOstzioA 提取码: 2pc5 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值