cat /etc/sysconfig/selinux
SELINUX=disabled
cat /etc/libvirt/qemu.conf
user = "root"
group = "root"
libvirt配置文件/etc/libvirt/qemu.conf设置如下属性
max_core = "unlimited"
设置core文件大小无限制
ulimit -c unlimited
设置core文件路径
echo "/home/tmp/core-%e-%p-%t" > /proc/sys/kernel/core_pattern
测试是否生成core文件,这里kill掉自己的终端进程
kill -SIGSEGV $$
HWADDR=30:9C:23:E3:E2:07
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_PRIVACY=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp2s0
UUID=a1153c96-4923-3638-ba0e-7c65fd849013
ONBOOT=yes
USERS=root
NM_CONTROLLED=no
Not an editor command
错误,默认使用的vi命令,规避办法mv /usr/bin/vi /usr/bin/vi.bak
ln -s /usr/bin/vim /usr/bin/vi
find /usr/ -name dia.desktop
/usr/share/applications/dia.desktop
vim /usr/share/applications/dia.desktop
Exec=env GTK_IM_MODULE=xim dia --integrated %F
echo "sshd: ALL" >> /etc/hosts.allow
systemctl restart sshd
grub2-editenv list
grub2-set-default "CentOS Linux (3.10.0-862.el7.x86_64) 7 (Core)"
grub2-set-default " centos-20200528003245-5.6.0-rc2+"
注:grub2-set-default命令后面接选项ID,CentOS7/boot/grub2/grub/grub.cfg获取;通过CentOS8通过/boot/loader/entries/xxx.conf获取
CentOS7:/boot/grub2/grubenv
CentOS8:/boot/efi/EFI/centos/grubenv
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo
yum makecache
yum repolist
yum list
yum groupinstall "Development Tools"
dhclient enp2s0
安装邮件收发工具
yum install -y postfix
设置sendmail工具配置文件,填写要使用的邮件地址,发件服务器地址,客户端授权码
echo "set [email protected] smtp=smtp.126.com [email protected] smtp-auth-password=客户端授权码 smtp-auth=login " >> /etc/mail.rc
使用sendmail工具发送邮件,通过126邮箱向qq邮箱发送邮件
echo "this is a test" > test.txt
mail -s "test" [email protected] <./test.txt
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eno1 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eno1 -j SNAT --to 172.23.73.76
nslookup www.baidu.com
或者dig | grep SERVER
GATEWAY=192.168.0.1
;DNS1=172.16.40.114
a yumdownloader --source kernel
b yum-builddep kernel
c rpm -ivh --root=`pwd` kernel.src.rpm
d rpmbuild -bb SPECS/kernel.spec --define "_topdir $(pwd)"
1)rpm包编译之后,拷贝出BUILD下的kernel源码,作为单独的源码目录
a 配置内核选项
make menuconfig
b 编译内核
make -j "$(lscpu |grep '^CPU(s):' | awk '{print $2}')"
c 单独编译所有模块
make modules -j "$(lscpu |grep '^CPU(s):' | awk '{print $2}')"
2)编译制作内核镜像
a 单独编译bzImage镜像
make bzImage -j "$(lscpu |grep '^CPU(s):' | awk '{print $2}')"
1)下载开源内核包,断点续传
mkdir kernel && cd kernel
git init
git remote add origin https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
while true; do git fetch origin ; done
2)使用虚机当前内核的配置文件按编译配置内核源码
cp /boot/config-4.18.0-147.el8.x86_64 /path/to/kernel/.config
make -j10
make modules
1) 安装glib库和开发包
yum install -y glib2 glib2-devel
2) 查看编译glib2需要引用的头文件和库文件
[root@hy glib_event]# pkg-config --cflags glib-2.0
-I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include
[root@hy glib_event]# pkg-config --libs glib-2.0
-lglib-2.0
3) 编译应用
gcc -o demo demo.c `pkg-config --cflags --libs glib-2.0`
debuginfo-install glib2-2.56.1-2.el7.x86_64 glibc-2.17-222.el7.x86_64 pcre-8.32-17.el7.x86_64
/usr/src/debug/glib-2.56.1/
yumdownloader --source kernel
rpm -ivh --root=`pwd` kernel.src.rpm
yum-builddep kernel
rpmbuild -bb SPECS/kernel.spec --define "_topdir $(pwd)"
make menuconfig
make -jN
make modules_install
make install
注意,内核调试需要打开的配置项没有明确的说法,可以参考Documentation/dev-tools下的文档,gdb+qemu调试内核同kgdb调试内核原理类似,因此可以把KGDB的配置都使能,以下配置可以都使能:
CONFIG_DEBUG_INFO 生成内核基本调试信息,即符号表
CONFIG_DEBUG_KERNEL 包含驱动的调试信息
CONFIG_KGDB 支持KGDB
CONFIG_FRAME_POINTER 支持gdb输出堆栈信息
CONFIG_GDB_SCRIPTS 生成vmlinux-gdb.py用于帮助gdb内核调试(高版本内核支持)
CONFIG_RANDOMIZE_BASE 内核地址空间布局随机化,如果打开,gdb调试的时候会报错访问不了符号对应的内存空间
CONFIG_DEBUG_RODATA 如果打开,内核只读地址空间无法设置断点
CONFIG_DEBUG_SET_MODULE_RONX 如果打开,内核模块只读空间无法设置断点
位置:
最后,对于一些想要调试的内核模块,也可以编译到内核,避免了在gdb调试的时候加载:
CONFIG_VIRTIO
CONFIG_VIRTIO_PCI
CONFIG_VIRTIO_PCI_LEGACY
CONFIG_VIRTIO_BALLON
CONFIG_VIRTIO_MMIO
CONFIG_VIRTIO_BLK
libvirt xml,增加如下标签,qemu命令行中,-s是-gdb tcp::1234缩写
cd /path/to/linux-build
gdb ./vmlinux
如果是高版本vmlinux,此时可以输入lx-symbols
加载符号,并使用该工具,参考内核文档Documentation/dev-tools/gdb-kernel-debugging.rst
5. 连接虚拟机的gdbserver
(gdb) target remote :1234
6. 设置内核源码目录
(gdb) dir .
7. 设置断点,开始内核调试(注意,有些符号使用kvm加速是断不了的,只能使用tcg加速,比如start_kernel)
b start_kernel
c
yum repolist
yum history
yum history undo id