在Linux内核调试时,经常会遇到下面的情况:
1、明明已经修改过代码,为什么功能没生效?
2、明明自己验证的功能没有问题,别人验证就出问题了呢?
遇到事情,不要慌,也不用先拿手机拍个照。
我们先看下Linux内核映像编译信息,判断下系统的Linux内核映像是否正确。
常用的查看内核映像编译信息的方法有:
1、在系统加载Linux内核时,查看启动日志
Starting kernel ...
[ 0.000000] Booting Linux on physical CPU 0x0
[ 0.000000] Initializing cgroup subsys cpuset
[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] Initializing cgroup subsys cpuacct
[ 0.000000] Linux version 4.4.154-00036-gcef30e88a9f5-dirty (root@ubuntu) (gcc version 7.3.1 20180425 [linaro-7.3-2018.05 revision d29120a424ecfbc167ef90065c0eeb7f91977701] (Linaro GCC 7.3-2018.05) ) #5 SMP Sun Jan 31 05:56:36 PST 2021
根据上面的启动日志可以得到如下信息:
1)Linux内核版本
Linux内核版本为:4.4.154。Linux内核版本信息也可通过Linux内核代码根目录下的Makefile验证,如下:
root@ubuntu:/home/run/code/rockchip-bsp/kernel# vi Makefile
VERSION = 4
PATCHLEVEL = 4
SUBLEVEL = 154
2)编译用户和主机名称
编译用户为:root;主机名称为:ubuntu。
3)工具链信息
工具链信息为:linaro-7.3-2018.05 revision d29120a424ecfbc167ef90065c0eeb7f91977701] (Linaro GCC 7.3-2018.05)
。
4)Linux内核映像编译时间
Linux内核映像编译时间为:Jan 31 05:56:36 PST 2021
。
上面日志的解析可以参考内核代码根目录文件:scripts/mkcompile_h
。
先把该文件最后一行删除,重新编译内核,然后查看.tmpver.1
文件。
scripts/mkcompile_h
文件代码修改:
#rm -f .tmpver.1 .tmpver.2
.tmpver.1
文件内容:
root@ubuntu:/home/run/code/rockchip-bsp/kernel# cat .tmpver.1
/* This file is auto generated, version 5 */
/* SMP */
#define UTS_MACHINE "arm64"
#define LINUX_COMPILE_BY "root"
#define LINUX_COMPILE_HOST "ubuntu"
#define LINUX_COMPILER "gcc version 7.3.1 20180425 [linaro-7.3-2018.05 revision d29120a424ecfbc167ef90065c0eeb7f91977701] (Linaro GCC 7.3-2018.05) "
2、dmesg
如果系统启动日志没有保存,也可以通过dmesg
命令查看。
root@linaro-alip:~# dmesg
[ 0.000000] Booting Linux on physical CPU 0x0
[ 0.000000] Initializing cgroup subsys cpuset
[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] Initializing cgroup subsys cpuacct
[ 0.000000] Linux version 4.4.154-00036-gcef30e88a9f5-dirty (root@ubuntu) (gcc version 7.3.1 20180425 [linaro-7.3-2018.05 revision d29120a424ecfbc167ef90065c0eeb7f91977701] (Linaro GCC 7.3-2018.05) ) #5 SMP Sun Jan 31 05:56:36 PST 2021
3、cat /proc/version
除了dmesg
命令,还可以通过cat /proc/version
查看,显示更为清晰。
root@linaro-alip:~# cat /proc/version
Linux version 4.4.154-00036-gcef30e88a9f5-dirty (root@ubuntu) (gcc version 7.3.1 20180425 [linaro-7.3-2018.05 revision d29120a424ecfbc167ef90065c0eeb7f91977701] (Linaro GCC 7.3-2018.05) ) #5 SMP Sun Jan 31 05:56:36 PST 2021
4、cat /proc/sys/kernel/version
如果是自己调试,也可以使用cat /proc/sys/kernel/version
命令,只查看编译时间。
root@linaro-alip:~# cat /proc/sys/kernel/version
#5 SMP Sun Jan 31 05:56:36 PST 2021
5、uname -a
当然也可以使用uname -a
命令。
root@linaro-alip:~# uname -a
Linux linaro-alip 4.4.154-00036-gcef30e88a9f5-dirty #5 SMP Sun Jan 31 05:56:36 PST 2021 aarch64 GNU/Linux
最后,秉承买一送一的原则,附赠一条查看系统版本的命令:cat /etc/issue
root@linaro-alip:~# cat /etc/issue
Debian GNU/Linux 9 \n \l
网友评论