一、相关信息

内核版本:

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

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

  1. 把图形写入linux内核,如何在linux内核启动时添加显示图片

    内核版本为2.6.30.4 为了实现了在linux内核启动时不仅仅是只显示一个静态的全屏logo, 而是显示能够表示内核正在启动的进度条,因此需要能够在启动过程中直接操纵framebuffer的功能. ...

  2. ARM linux内核启动时几个关键地址【转】

    转自:http://www.cnblogs.com/armlinux/archive/2011/11/06/2396787.html 1.       内核启动地址 1.1.   名词解释 ZTEXT ...

  3. linux指定内核位置,ARM linux内核启动时几个关键地址

    1.       内核启动地址 ZTEXTADDR 解压代码运行的开始地址.没有物理地址和虚拟地址之分,因为此时MMU处于关闭状态.这个地址不一定时RAM的地址,可以是支持读写寻址的flash等存储中 ...

  4. 查看Linux内核启动时调用的init函数

    Linux内核引导加载后 会调用一些初始化函数 其中有很多模块化的代码使用do_initcalls调用 这些函数通过宏pure_initcall.core_initcall.subsys_initca ...

  5. linux卡死在选择内核界面,求助:am3352 linux内核启动时卡在 Starting kernel ...

    这是用光盘里的uImage的输出信息: U-Boot# tftp 0x82000000 bakuImage link up on port 0, speed 100, full duplex Usin ...

  6. 从linux内核启动,学习Linux内核启动过程:从start_kernel到init

    一.实验步骤: 1:运行menuos: a)cd LinuxKernel/ b)qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd root ...

  7. IDEA 启动tomcat 项目时控制台打印日志中文乱码

    在做一个新项目的时候发现,IDEA 启动tomcat 项目时控制台打印日志中文乱码 解决方案:点击Help-->Edit Custom VM Options 将   -Dfile.encodin ...

  8. Linux内核启动流程(待完善)

    文章目录 一.Linux内核自解压过程 二.Linux内核启动第二阶段stage1 2.1.linux系统启动入口函数(stext) 2.2.内核初始化阶段(start_kernel) 2.3.2 r ...

  9. Android研究-linux内核启动到android系统

    很多人阅读代码,总喜欢从头开始,这样觉得很安全,有依靠,无论如何总是能知道"头",有头就能找到任何需要的部分. Android生在linux内核基础上,linux内核启动的最后一步 ...

最新文章

  1. 在CGD中快速实现多线程的并发控制
  2. 第04篇 JDK版本导致Unsupported major.minor version 52.0 error
  3. C# DataSet性能最佳实践
  4. 小额贷款利息违法吗?
  5. Kali Linux 从入门到精通(八)-主动信息收集
  6. (43)System Verilog 类中变量随机化
  7. 问题三十:《Ray Tracing In One Weekend》封面图形生成
  8. matlab2014启动很慢,matlab启动慢的解决方法
  9. 制作OTA U盘升级包
  10. mcgscom口针脚定义_COM口针脚定义
  11. 模糊控制器原理笔记(附简单demo以及MATLAB相关操作)
  12. 半导体器件物理【3】半导体与IC工艺
  13. mscomm32.ocx 注册 和 web 调用案例
  14. 低电平译码器LS138设计
  15. 图解技术原理,真的太赞了!
  16. Linux基础加实际操作演示
  17. 如何让USB-C手机,电脑投屏到VR眼镜方案?还能同时实现充电?乐得瑞LDR6282 转接器方案
  18. iphone修改app名称_如何更改iPhone App名称100%!
  19. 敏捷开发-故事与估算
  20. 原来路由器也属于消耗品

热门文章

  1. 从原理到制造再到应用,这篇文章终于把MEMS技术讲透了!
  2. IBomFeature Interface
  3. 【Trex】Trex初始化配置和server/client的启动
  4. 用友汽车软件java,java编程用什么软件最好?java编程软件分享
  5. npm run dev error:0308010C:digital envelope routines::unsupported
  6. 华为机试HJ97:记负均正
  7. 为什么神经网络不适合自然语言理解
  8. 在Windows下完成QTL-seqMutMap
  9. 仿个人税务 app html5_小心你填写的“个税APP”有可能是假的
  10. 【作业】python——小说Walden的词频统计,并从高到低排序