高考考试网
当前位置: 首页 高考资讯

深入理解linux内核架构(Linux系统内核概述)

时间:2023-07-02 作者: 小编 阅读量: 5 栏目名: 高考资讯

深入理解linux内核架构Linux内核是一种开源的类Unix操作系统宏内核。Linux内核是Linux操作系统的主要组件,也是计算机硬件与其进程之间的核心接口。它负责两者之间的通信,还要尽可能高效地管理资源。之所以称为内核,是因为它在操作系统中就像果实硬壳中的种子一样,并且控制着硬件的所有主要功能。用户所看到的内容则被称为用户空间。modinfo能够查询系统中未安装的模块信息。modinfo默认情况下,为了便于阅读,以下面的格式列出模块的每个属性:fieldname:value。

深入理解linux内核架构?Linux 内核是一种开源的类 Unix 操作系统宏内核,我来为大家讲解一下关于深入理解linux内核架构?跟着小编一起来看一看吧!

深入理解linux内核架构

Linux 内核是一种开源的类 Unix 操作系统宏内核。

Linux 内核是 Linux 操作系统的主要组件,也是计算机硬件与其进程之间的核心接口。它负责两者之间的通信,还要尽可能高效地管理资源。之所以称为内核,是因为它在操作系统中就像果实硬壳中的种子一样,并且控制着硬件的所有主要功能。内核的用途主要有以下 4 项工作:

  • 内存管理:追踪记录有多少内存存储了什么以及存储在哪里
  • 进程管理:确定哪些进程可以使用中央处理器、何时使用以及持续多长时间
  • 设备驱动程序:充当硬件与进程之间的调解程序/解释程序
  • 系统调用和安全防护:从流程接受服务请求

    在正确实施的情况下,内核对于用户是不可见的,它在自己的小世界(称为内核空间)中工作,并从中分配内存和跟踪所有内容的存储位置。用户所看到的内容则被称为用户空间。这些应用通过系统调用接口(SCI)与内核进行交互。

    Linux系统内核概述


    1. 内核简介

    单内核体系设计、但充分借鉴了微内核设计体系的优点,为内核引入模块化机制。

    Linux 内核的重要组成部分,主要有以下几部分:

  • kernel内核核心,一般为 bzImage通常在 /boot 目录下,名称为 vmlinuz-VERSION-RELEASE
  • kernel object内核对象,一般放置于 /lib/modules/VERSION-RELEASE/[ ] ==> N ==> 不编译进内核[M] ==> M ==> 编译为模块文件[*] ==> Y ==> 编译进内核
  • 辅助文件(ramdisk)initrdinitramfs
    2. 内核模块2.1 uname 命令

    使用格式

  • uname [OPTION]...

    参数解释

  • -n 显示节点名称
  • -r 显示VERSION-RELEASE
  • -s 内核名称
  • -v 内核版本
  • -n 节点名
  • -m 硬件名称
  • -i 硬件平台
  • -p 处理器类型
  • -o 操作系统

    # uname -mi686# uname -r2.6.32-573.22.1.el6.i686# uname -aLinux MyServer 2.6.32-573.22.1.el6.i686 ... i686 i386 GNU/Linux


    2.2 lsmod 命令

    显示由核心已经装载的内核模块

    命令定义

  • 显示的内容来自于: /proc/modules 文件。
  • 使用 lsmod 命令时,常会采用类似 lsmod | grep -i ext4 这样的命令来查询系统是否加载了某些模块。

    # cat /proc/modulesiptable_filter 2173 0 - Live 0xed9b2000ip_tables 9567 1 iptable_filter, Live 0xed9a9000ext3 203718 1 - Live 0xed962000jbd 65315 1 ext3, Live 0xed904000xenfs 4360 1 - Live 0xed8e6000ipv6 271097 14 - Live 0xed88e000xen_netfront 15871 0 - Live 0xed7d9000ext4 339812 2 - Live 0xed764000jbd2 75927 1 ext4, Live 0xed6d9000mbcache 6017 2 ext3,ext4, Live 0xed6b7000xen_blkfront 19209 5 - Live 0xed69f000dm_mirror 11969 0 - Live 0xed68d000dm_region_hash 9644 1 dm_mirror, Live 0xed67e000dm_log 8322 2 dm_mirror,dm_region_hash, Live 0xed672000dm_mod 84711 11 dm_mirror,dm_log, Live 0xed64e000

    # lsmod | grep ext4ext43398122jbd2759271 ext4mbcache60172 ext3,ext4

    字段含义

  • 第 1 列:表示模块的名称
  • 第 2 列:表示模块的大小
  • 第 3 列:表示依赖模块的个数
  • 第 4 列:表示依赖模块的内容

    # lsmodModuleSizeUsed byiptable_filter21730ip_tables95671 iptable_filterext32037181jbd653151 ext3xenfs43601ipv627109714xen_netfront 158710ext43398122jbd2759271 ext4mbcache60172 ext3,ext4xen_blkfront 192095dm_mirror119690dm_region_hash96441 dm_mirrordm_log83222 dm_mirror,dm_region_hashdm_mod8471111 dm_mirror,dm_log


    2.3 modinfo 命令

    显示模块的详细描述信息

    命令定义

  • modinfo 列出 Linux 内核中命令行指定的模块的信息。
  • modinfo 能够查询系统中未安装的模块信息。
  • 若模块名不是一个文件名,则会在 /lib/modules/version 目录中搜索,就像 modprobe 一样。
  • modinfo 默认情况下,为了便于阅读,以下面的格式列出模块的每个属性:fieldname : value。

    语法

  • modinfo [选项] [ modulename|filename... ]

    选项

  • -n 只显示模块文件路径
  • -p 显示模块参数
  • -a author
  • -d description
  • -l license
  • -0 使用’\0’字符分隔 field 值,而不是一个新行,对脚本比较有用

    实战演示

    # modinfo ext4filename:/lib/modules/2.6.32-573.22.1.el6.i686/kernel/fs/ext4/ext4.kolicense:GPLdescription:Fourth Extended Filesystemauthor:Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore and otherssrcversion:CB1B990F5A758DFB0FB12F1depends:mbcache,jbd2vermagic:2.6.32-573.22.1.el6.i686 SMP mod_unload modversions 686# modinfo btrfsfilename:/lib/modules/2.6.32-573.22.1.el6.i686/kernel/fs/btrfs/btrfs.kolicense:GPLalias:devname:btrfs-controlalias:char-major-10-234srcversion:B412C18B0F5BF7F1B3C941Adepends:libcrc32c,zlib_deflate,lzo_compress,lzo_decompressvermagic:2.6.32-573.22.1.el6.i686 SMP mod_unload modversions 686


    2.4 modprobe 命令

    装载或卸载内核模块

    命令定义

  • 配置文件/etc/modprobe.conf/etc/modprobe.d/*.conf
  • 解决依赖modprobe需要一个最新的modules.dep文件,可以用depmod来生成该文件列出了每一个模块需要的其他模块,modprobe使用这个去自动添加或删除模块的依赖

    bash

    # modules.dep为解决依赖的配置文件,modules.dep.bin二进制文件运行# ls /lib/modules/2.6.32-358.6.1.el6.i686/buildmodules.blockmodules.ieee1394mapmodules.ofmapmodules.symbols.binweak-updatesextramodules.ccwmapmodules.inputmapmodules.ordermodules.usbmapkernelmodules.depmodules.isapnpmapmodules.pcimapsourcemodules.aliasmodules.dep.binmodules.modesettingmodules.seriomapupdatesmodules.alias.binmodules.drmmodules.networkingmodules.symbolsvdso

    语法

  • modprobe [ -c ]
  • modprobe [ -l ] [ -t dirname ] [ wildcard ]
  • modprobe [ -r ] [ -v ] [ -n ] [ -i ] [ modulename … ]

    选项

  • -v显示程序在干什么,通常在出问题的情况下,modprobe 才显示信息
  • -C重载,默认配置文件(/etc/modprobe.conf 或 /etc/modprobe.d)
  • -c输出配置文件并退出
  • -n可以和 -v 选项一起使用,调试非常有用
  • -i该选项会使得 modprobe 忽略配置文件中的,在命令行上输入的 install 和 remove
  • -q一般 modprobe 删除或插入一个模块时,若没有找到会提示错误。使用该选项,会忽略指定的模块,并不提示任何错误信息。
  • -r该选项会导致 modprobe 去删除,而不是插入一个模块通常没有没有理由去删除内核模块,除非是一些有 bug 的模块
  • -f使用该选项是比较危险的和同时使用 –force-vermagic,–force-modversion 一样
  • -l列出所有模块
  • -a插入所有命令行中的模块
  • -t强制 -l 显示 dirname 中的模块
  • -s错误信息写入 syslog
    2.5 depmod 命令

    内核模块依赖关系文件及系统信息映射文件的生成工具

    语法

  • depmod [-adeisvV][-m <文件>][--help][模块名称]

    参数

  • -a 分析所有可用的模块
  • -d 执行排错模式
  • -e 输出无法参照的符号
  • -i 不检查符号表的版本
  • -m<文件> 使用指定的符号表文件
  • -s 在系统记录中记录错误
  • -v 执行时显示详细的信息
  • -V 显示版本信息
  • --help 显示帮助
    2.6 insmod 和 rmmod 命令

    装载或卸载内核模块

    不解决依赖关系,需要自己手动卸载

    insmod命令

  • 向 Linux 内核中插入一个模块
  • insmod 是一个向内核插入模块的小程序
  • 大多数用户使用 modprobe 因为它比较智能化
  • insmod [ filename ] [ module options... ]

    rmmod命令

  • 命令解析删除内核中的一模块rmmod 是一个可以从内核中删除模块的小程序,大多数用户使用modprobe -r去删除模块
  • 语法格式rmmod [ modulename ]
  • 参数选项-f除非编译内核时 CONFIG_MODULE_FORCE_UNLOAD 被设置该命令才有效果,否则没效果用该选项可以删除正在被使用的模块,设计为不能删除的模块,或者标记为 unsafe 的模块-wrmmod 拒绝删除正在被使用的模块使用该选项后,指定的模块会被孤立起来,直到不被使用-s将错误信息写入 syslog,而不是标准错误(stderr)
    3. /proc 目录

    内核把自己内部状态信息及统计信息,以及可配置参数通过 proc 伪文件系统加以输出。

    # ls /proc/111732229855354760973filesystemsloadavgscsi version10122333648600buddyinfofs locksself vmallocinfo10711323230374961businterruptsmdstatslabinfovmstat1082142343138562cgroupsiomemmeminfosoftirqsxen1085152431314395287cmdlineioportsmiscstat zoneinfo1116253174531739cpuinfoirqmodulesswaps115017252318405438cryptokallsymsmountssys116218253324156808deviceskcoremtd sysrq-trigger1163192632042566830diskstatskeysnet sysvipc11651908273343567853dmakey-userspagetypeinfotimer_list116722833044579driverkmsgpartitionstimer_stats11692029334455994execdomainskpagecountsched_debugtty117121298533446695fb kpageflagsschedstatuptime


    3.1 sysctl 命令

    语法格式

  • sysctl(选项)(参数)

    命令参数

  • -n 打印值时不打印关键字
  • -e 忽略未知关键字错误
  • -N 仅打印名称
  • -w 当改变 sysctl 设置时使用此项
  • -p 从配置文件 /etc/sysctl.conf 加载内核参数设置
  • -a 打印当前所有可用的内核参数变量和值
  • -A 以表格方式打印当前所有可用的内核参数变量和值

    默认配置文件

  • /etc/sysctl.conf

    命令使用方式

  • (1) 设置某参数sysctl -w parameter=VALUE
  • (2) 通过读取配置文件设置参数sysctl -p [/path/to/conf_file]

    参数说明

  • 只读:输出信息
  • 可写:可接受用户指定“新值”来实现对内核某功能或特性的配置/proc/sys

    两种修改方式

  • (1) sysctl 命令用于查看或设定此目录中诸多参数sysctl -w path.to.parameter=VALUEsysctl -w kernel.hostname=mail.escapelife.com
  • (2) echo 命令通过重定向的方式也可以修改大多数参数的值echo "VALUE" > /proc/sys/path/to/parameterecho "www.escapelife.com" > /proc/sys/kernel/hostname

    配置文件中常用的几个参数

  • net.ipv4.ip_forward
  • /proc/sys/net/ipv4/ip_forward
  • vm.drop_caches
  • /proc/sys/vm/drop_caches
  • kernel.hostname
  • /proc/sys/kernel/hostname
    3.2 修改配置文件

    # cat /etc/sysctl.conf# Kernel sysctl configuration file for Red Hat Linux# Controls IP packet forwardingnet.ipv4.ip_forward = 0# Controls source route verificationnet.ipv4.conf.default.rp_filter = 1# Do not accept source routingnet.ipv4.conf.default.accept_source_route = 0# Controls the System Request debugging functionality of the kernelkernel.sysrq = 0# Controls whether core dumps will append the PID to the core filename.# Useful for debugging multi-threaded applications.kernel.core_uses_pid = 1# Controls the use of TCP syncookiesnet.ipv4.tcp_syncookies = 1# Disable netfilter on bridges.net.bridge.bridge-nf-call-ip6tables = 0net.bridge.bridge-nf-call-iptables = 0net.bridge.bridge-nf-call-arptables = 0# Controls the default maxmimum size of a mesage queuekernel.msgmnb = 65536# Controls the maximum size of a message, in byteskernel.msgmax = 65536# Controls the maximum shared segment size, in byteskernel.shmmax = 4294967295# Controls the maximum number of shared memory segments, in pageskernel.shmall = 268435456# Auto-enabled by xs-tools:install.shnet.ipv4.conf.all.arp_notify = 1


    3.3 实战演示

    # 查看所有可读变量sysctl -a# 修改对应参数sysctl -w kernel.sysrq=0sysctl -w kernel.core_uses_pid=1sysctl -w net.ipv4.conf.default.accept_redirects=0# 如果希望屏蔽别人 ping 你的主机,配置文件修改net.ipv4.icmp_echo_ignore_all = 1# 编辑完成后,请执行以下命令使变动立即生效/sbin/sysctl -p/sbin/sysctl -w net.ipv4.route.flush=1


    4. /sys 目录

    sysfs 伪文件系统,输出内核识别出的各硬件设备的相关属性信息,也有内核对硬件特性的设定信息。有些参数是可以修改的,用于调整硬件工作特性。

    4.1 udev
  • udev 是运行用户空间程序。
  • udev 通 /sys/ 路径下输出的信息动态为各设备创建所需要设备文件。
  • udev 是 Linux 内核的设备管理器,它取代了 udevadmin 和 hotplug,负责管理 /dev 中的设备节点。
  • udev 也处理所有用户空间发生的硬件添加、删除事件,以及某些特定设备所需的固件加载。
  • udev 为设备创建设备文件时,会读取其事先定义好的规则文件,一般在 /etc/udev/rules.d 及 /usr/lib/udev/rules.d 目录下。

    点击这里查看 ==> Arch Wiki udev


    4.2 ramdisk 文件的制作

    方法一

  • mkinitrd 命令
  • 为当前正在使用的内核重新制作 ramdisk 文件
  • mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)

    # 移动ramdisk文件到/root目录下mv /boot/initramfs-2.6.32...img /root# 为当前正在使用的内核重新制作ramdisk文件mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)

    方法二

  • dracut 命令
  • 为当前正在使用的内核重新制作 ramdisk 文件
  • dracut /boot/initramfs-$(uname -r).img $(uname -r)

    # 移动ramdisk文件到/root目录下mv /boot/initramfs-2.6.32...img /root# 为当前正在使用的内核重新制作ramdisk文件dracut /boot/initramfs-$(uname -r).img $(uname -r)


    4.3 查看 ramdisk

    # 使用file命令查看ramdisk文件发现是以gz压缩存放的file /boot/initramfs-2.6.32-504.el6.x86_64.img# 改名称,解压cd /boot/mv initramfs-2.6.32-504.el6.x86_64.img initramfs-2.6.32-504.el6.x86_64.img.gzgzip -d initramfs-2.6.32-504.el6.x86_64.img.gz# 使用file命令查看发现是以cpio存放的文本文件file initramfs-2.6.32-504.el6.x86_64.img# 解压这个文本文件# 之后会在initrd目录下生成相应的文件,一个微型的/rootmkdir initrdcd initrdcpio -id < ./initramfs-2.6.32-504.el6.x86_64.img# 这个时候就可以查看init脚本文件了cat init# 在sbin文件中存放着相关的命令ls sbin


    5. 编译内核5.1 前提准备

    (1) 准备好开发环境

  • 包组(CentOS 6)
  • Server Platform Development
  • Development Tools

    (2) 获取目标主机上硬件设备的相关信息

  • CPUcat /proc/cpuinfox86info -alscpu
  • PCI 设备lspci-v-vvlsusb-v-vvlsblk
  • 了解全部硬件设备信息hal-device

    (3) 获取到目标主机系统功能的相关信息

    (4) 获取内核源代码包

  • www.kernel.org
    5.2 简易安装内核

    简易安装

  • 获取当前系统的安装文件作为模块安装较为方便
  • 修改相应的参数即可
  • 只适用于当前特定的内核版本
  • 当前系统的安装文件在 config-2.6.32-504.el6.x86_64

    简单依据模板文件的制作内核

    # 下载对应的Linux内核版本进行解压缩# 会在/usr/src目录下创建debug、kernels和linux-3.10.67目录tar xf linux-3.10.67.tar.xz -C /usr/src# 为了方便多内核共存,使用连接指向# 会在当前目录下创建一个链接文件 linux -> linux-3.10.67cd /usr/srcln -sv linux-3.10.67 linux# 创建模板cd linux# 查看链接指向的文件内容ls# 拷贝系统自带的模板文件cp /boot/config-$(uname -r) .config# 打开图形界面配置内核选项,选择添加、删除内核模块# 添加的默认选项来自.config配置文件make menuconfig# 使用screen来不中断安装screen# 采用几个线程进行编译make -j n# 安装内核make modules_install# make install中将会安装内容# 安装bzImage为/boot/vmlinuz-VERSION-RELEASE# 生成initramfs文件# 编辑grub的配置文件make install# 重启系统,并测试使用新内核,不是默认启动内核init 6


    5.3 详解编译内核

    (1) 配置内核选项

  • 支持“更新”模式进行配置
  • (a) make config:基于命令行以遍历的方式去配置内核中可配置的每个选项
  • (b) make menuconfig:基于 curses 的文本窗口界面
  • (c) make gconfig:基于 GTK 开发环境的窗口界面
  • (d) make xconfig:基于 Qt 开发环境的窗口界面
  • 支持“全新配置”模式进行配置
  • (a) make defconfig:基于内核为目标平台提供的“默认”配置进行配置
  • (b) make allnoconfig: 所有选项均回答为”no“

    (2) 编译 - make [-j #]

  • 如何只编译内核中的一部分功能

    # (a)只编译某子目录中的相关代码cd /usr/src/linuxmake dir/# (b)只编译一个特定的模块cd /usr/src/linuxmake dir/file.ko# 例如:只为e1000编译驱动make drivers/net/ethernet/intel/e1000/e1000.ko

  • 如何交叉编译内核

    # 编译的目标平台与当前平台不相同;make ARCH=arch_name# 要获取特定目标平台的使用帮助make ARCH=arch_name help

  • 如何在已经执行过编译操作的内核源码树做重新编译

    # 事先清理操作# 清理大多数编译生成的文件,但会保留config文件等make clean# 清理所有编译生成的文件、config及某些备份文件make mrproper# mrproper、patches以及编辑器备份文件make distclean


    文章作者: Escape

    文章链接: http://www.escapelife.site/posts/3acaa44c.html

    • 推荐阅读
    • 网红翻车事件刘思瑶(网红见光死)

      不光如此,很多网红都是整容脸,这一类人,也被称之为“见光死”。在众多网红都翻车的情况下,有一位网红确实是经受住了考验,那就是“虎牙一姐”。没想到“虎牙一姐”居然挺住了,这位只靠才华而不靠容貌的网红生图居然还可以。张大仙的粉丝基础也是很雄厚的,粉丝数量高达百万,当然,这种人肯定不缺流量,她们直播一场游戏的钱也是我们难以想象的。当网红,还是需要很强大的心里承受能力的。

    • 欧式软面包怎么弄(怎样做欧式软面包)

      欧式软面包怎么弄?欧式软面包怎么弄用料:高筋面粉300克、黄油30克、鸡蛋1个、牛奶150克、盐2克、糖30克、酵母3克、葡萄干、适量。先将牛奶、鸡蛋、糖、盐放入桶内,将面粉将液体材料盖住,在面粉上挖出一个小坑放入酵母。选好需要制作的面包和重量。15分钟后第二次和面,在第二次和面时加入软化的黄油和葡萄干。和好后进入三次发酵过程,面团慢慢变大。发酵后进入烘烤状态。脱模后将面包晾凉。

    • 王者荣耀提高加载速度(怎么提高游戏加载速度)

      王者荣耀提高加载速度方法一:打开手机设置。打开“移动网络”。在下面填写小写字母“cntds”,完成提交后重启流量数据即可。王者荣耀游戏同时在线人数太多王者荣耀一个服务器(大区)通常几百万人,若你在高峰期去玩卡的几率确实很大。中午12点-13点是最热门的游戏时间,16点之后热度又开始持续上升,晚高峰出现在21点前后。

    • 十二大识人智慧图解(为什么指纹十个斗人一生可享清福呢)

      十二大识人智慧图解?科技的进步为聪明人提供了广阔的生存天地,使他们清福得到更名符其实、心安理得。可得把清闲留给自己,感觉有点懒惰,但仍属十斗聪明的表现。知命而行,不追求自己能力以外的命运和生活,人贵在自知。一个人只能有一种命运,并非指“听天由命”。任何一个强者,都不可能听天由命,他们只会让命运掌握在自己的手里。

    • 电梯可不可以人脸识别(长春有小区电梯安装人脸识别系统引发争议)

      小区安装人脸识别系统是为了维护安全,相信大多数居民肯定支持。对此,齐女士表示,小区人脸识别系统的日常运营、维护、管理都有物业专人负责,而且,公司对员工也有相关规定,不允许泄露业主信息。去年疫情期间,有一家公益企业免费为小区门口安装了人脸识别系统,系统数据由企业来保管。单纯以身份核验为目的的人脸识别并不可怕,可怕的是人脸信息被滥用、泄露,被用于关联分析个人信息。

    • iPhone扫码功能在哪里(iphone扫码在哪里找)

      iPhone,是iPhone公司旗下研发的智能手机系列,它搭载iPhone公司研发的iOS手机作业系统。第一代iPhone于2007年1月9日由当时iPhone公司CEO的史蒂夫·乔布斯发布,并在同年6月29日正式发售。iPhone公司跟AT&T秘密合作创造了一些硬件和软件设备—当时的Cingular无线网络—AT&T并给予iPhone公司投资及很大自由度,在30个月动用了约$1.5亿美元。作为交换条件,iPhone公司保证在4年内,在美国出售的iPhone将交由AT&T独家发售。

    • 世界经济发展历程概述(我们一起探究历史的轨迹)

      新社会制度的确立,有利于资本主义经济的进一步发展。⒉随着工业革命的进行,欧美日开始了新一轮的资产阶级革命或改革,资本主义经济战胜封建经济,资本主义发展成为主流。世界由“蒸汽时代”进入“电气时代”。19世纪末20世纪初,主要的资本主义国家相继进入帝国主义阶段。具有民主传统的英法美等国采取国家干预的方式摆脱危机,以美国的罗斯福新政最为典型。

    • 詹姆士一世时代在英国历史的地位(威廉乔治霍斯金斯与英国新社会史的兴起)

      ⑥国内学界对英国新社会史的关注与研究则深入许多,并呈方兴未艾之势。笔者认为,稍晚于屈威廉的霍斯金斯及其代表的新地方史便是英国新社会史的另一重要学术渊源。面对地方史的尴尬处境,霍斯金斯不止一次呼吁地方史的独立价值,寻求建立一种新地方史。霍斯金斯在20世纪50年代年曾从理论上批评了此前英国地方史的书写传统。在霍斯金斯看来,新地方史撰述的主角应是底层普通民众,他们才是地方共同体的支柱。

    • lol三个人挂机的队友(LOL有个玩家遇到挂机的队友)

      说起英雄联盟游戏中挂机,这大概是最让队友灰心的一个举动之一吧。简直比抢五杀还要可恶!这可是3v5,4v5,前期队友掉线,也许我们的等级会有优势!可到了中后期,对面抱团起来那可怎么玩!没有一个逆天的1V5亚索,这让我们怎么玩!直接就是恍恍惚惚红红火火了!也不知道你们平时遇到挂机,会不会随手举报呢!LOL有个玩家遇到挂机都会用心去举报!对,没错这个人就是老司机我了...一起来讨论讨论,队友挂机对你们游戏的体验和影响吧!!

    • 买高铁票时候可以携带充电宝吗(充电宝能不能带)

      来看上海铁路服务中心的解答↓,我来为大家科普一下关于买高铁票时候可以携带充电宝吗?如何在线注销12306账户?候补购票不会预留固定票额,所有票额均全部在互联网上发售。候补车票的来源是其他旅客的退票、改签或在规定时间内未支付后所产生的剩余票额,如有票额会首先满足候补购票需求。被人民法院限制消费的被执行人,不得乘坐列车软卧、G字头动车组列车全部座位、其他动车组列车一等以上座位(含一等)。