【原创】xenomai3.1+linux构建linux实时操作系统-基于X86_64和arm
版权声明:本文为本文为博主原创文章,转载请注明出处。如有问题,欢迎指正。博客地址:https://www.cnblogs.com/wsg1100/
最近接触实时系统Xenomai,该文章整理记录X86 ubuntu环境下xenomai 内核编译、xenomai应用环境搭建步骤,其他硬件架构(如arm、arm64)类似,先在X86上安装好环境才能更好的开发验证xenomai程序吧,更多信息见文末参考链接,希望对你有所帮助。
一、概要
xenomai是众多inux实时性解决方案中的一种,通过在linux的基础上添加一个RTOS内核cobalt,来提高linux的实时性。实时内核cobalt与非实时内核linux相结合,既能提供工业级RTOS的硬实时性能,又能利用linux操作系统非常出色的网络和图形界面服务,在产品的开发周期和成本控制方面都有巨大优势,结构如下:
主要有3部分,xenomai的移植构建也是围绕这三部分来进行:
- 用户空间中的实时应用程序库libcobalt;
- 内核空间中的实时内核Cobalt;
- 硬件架构与Linux内核版本相关层 ipipe-core;
libcobalt和Cobalt的源码随xenomai更新,位于同一源码包内,ipipe-core则与硬件架构和具体linux版本相关,以补丁的方式提供,需要单独下载;
总的来说,ipipe-core实现必要功能的同时,也是xenomai与硬件架构、linux版本间的解耦层,社区提供了常见架构下各linux版本的补丁,目前提供的最新ipipe-core是基于linux 4.19(2020-04-16)。xenomai的移植步骤如下:
- 对准备好的linux源码打ipip-core补丁;
- 打cobalt内核补丁,编译构建内核;
- libcobalt库编译安装,设置环境变量。
步骤1中的源码文件也可直接从xenomai维护分支直接拉取,直接对拉取的代码进行步骤2、3即可。
ARM: https://xenomai.org/gitlab/ipipe-arm
ARM64: https://xenomai.org/gitlab/ipipe-arm64
PPC32: https://xenomai.org/gitlab/ipipe-ppc32
x86: https://xenomai.org/gitlab/ipipe-x86
二、环境准备
1.1 安装内核编译工具
编译Linux内核需要的工具包如下,可能不全,可根据编译时的错误提示安装缺少的工具。
sudo apt-get install gcc libncurses-dev flex bison openssl-dev libssl-dev dkms libelf-dev libudev-dev libpci-dev libiberty-dev build-dep
1.2 准备内核及补丁文件
内核:下载linux源码,linux内核源码网址:https://www.kernel.org/。
ipipe补丁文件:下载与linux版本对应的ipipe-core补丁,最好先浏览https://xenomai.org/downloads/ipipe/v4.x/看xenomai提供了哪些linux版本的补丁,再去下载对应linux内核源码。
xenomai内核源码包:到xenomai官网 下载最新xenomai源码包。
本文选用以下版本作为示例:
linux kernel:linux-4.19.114.tar.xz
ipip-core:ipipe-core-4.19.114-cip24-x86-12.patch
xenomai:xenomai-3.1.tar.bz2
一般来说,如果没有找到与你使用的内核版本一致的ipipe-core补丁,linux相近版本linux-4.19.zzz,只要版本zzz跨度不大,也可使用相近的补丁代替。
说明:笔者将上面的文件,统一放到了/home/work/xenomai(家目录~)目录下。文中涉及绝对路径时,还请读者注意。
三、内核安装流程
3.1 打ipipe补丁
解压linux内核源码:
$tar -xvf linux-4.19.114.tar.xz
进入linux内核源码目录打ipipe补丁:
$cd linux-4.19.114
$patch -p1 < ../ipipe-core-4.19.114-cip24-x86-12.patch
3.2 添加xenomai内核
解压xenomai源码包:
$tar -xvf xenomai-3.1.tar.bz2
进入xenomai源码目录xenomai-3.1/scripts
,使用脚本prepare-kernel.sh
对linux内核源码打cobalt内核补丁;
$cd xenomai-3.0.8/scripts
脚本prepare-kernel.sh
使用帮助如下:
$ ./prepare-kernel.sh --help
usage: prepare-kernel --linux=<linux-tree> --ipipe=<ipipe-patch> [--arch=<arch>] [--outpatch=<file> [--filterkvers=y|n] [--filterarch=y|n]] [--forcelink] [--default] [--verbose]
其中主要参数为:
--linux=
指定linux源码的绝对路径;
--ipipe=
指定ipipe补丁。如果已经手动对linux源码打ipipe补丁,则不需要指定该参数。
--arch=
指定硬件架构,x86_64、arm、arm64
outpatch=
指定输出xenomai patch(绝对路径)。默认情况下如果不使用该参数,prepare-kernel.sh打cobalt内核补丁时,只会在linux源码目录建立与cobalt源码的软连接文件,这样的话,如果xenomai源码移动了就会有很多问题,所以推荐使用该参数生成xenomai内核的补丁,再去对linux使用该补丁。这样linux源码内的cobalt内核相关源码文件就不是链接文件了,今后再次构建时也直接使用该补丁,省事。
我们在上一个步骤已经对linux源码打了ipipe补丁,这里就只使用prepare-kernel.sh生成cobalt内核的补丁cobalt-core-3.1-4.19.114.patch,再对linux内核源码使用该补丁。
$./prepare-kernel.sh --linux=/home/work/xenomai/linux-4.19.114 --arch=x86_64 --outpatch=/home/work/xenomai/cobalt-core-3.1-4.19.114.patch
回到linux源码目录使用补丁:
$cd /home/work/xenomai/linux-4.19.114
$patch -p1 < ../cobalt-core-3.1-4.19.114.patch
到此,内核源码已经制作完毕。下面开始配置编译内核。
3.3 xenomai 内核配置
xenomai基于linux,xenomai作为一个小的实时核存在,许多硬件配置是linux 驱动掌管的,比如内存、电源管理,所以必须让linux配置好,给xenomai提供一个好的软硬件环境。
这里示范使用的是内核默认的x86_64_deconfig文件。
注意:使用默认config文件,会包很多无用的驱动,编译会占用很多时间,然而裁剪驱动需要对内核各模块熟悉,且需要大量时间。对于新手来说,快捷的办法是找一个发行版(如Ubuntu),从相近版本内核安装包中提取config文件,在该config基础上进行xenomai配置,这样比较好。
$makeolddefconfig
$make menuconfig
进入menuconfig界面,会看影响xenomai实时性的警告信息:
*** WARNING! Page migration (CONFIG_MIGRATION) may increase ***
*** latency. ***
*** WARNING! At least one of APM, CPU frequency scaling, ACPI 'processor' ***
*** or CPU idle features is enabled. Any of these options may ***
*** cause troubles with Xenomai. You should disable them. ***
依次进行如下配置:
General setup --->
Preemption Model (Preemptible Kernel (Low-Latency Desktop)) --->
(X) Low-Latency Desktop
Processor type and features --->
Processor family (Core 2/newer Xeon) --->
(X) Core 2/newer Xeon
[*] Multi-core scheduler support
[ ] CPU core priorities scheduler support
Power management and ACPI options --->
CPU Frequency scaling --->
[ ] CPU Frequency scaling
[*] ACPI (Advanced Configuration and Power Interface) Support --->
< > Processor
CPU Idle --->
[ ] CPU idle PM support
Memory Management options --->
[ ] Contiguous Memory Allocator
[ ] Transparent Hugepage Support
[ ] Allow for memory compaction
[ ] Page migration
Microsoft Hyper-V guest support --->
< > Microsoft Hyper-V client drivers
到此内核基本配置完毕,要充分发挥xenomai的实时性的配置远不止于此,还需要对linux进行深度配置,那是优化的事情,以后再说,下面开始进行内核编译。
3.4 内核编译与安装
a) 编译构建xenomai内核debian安装包
对于基于debian衍生的发行版(如debian、Ubuntu、elementary、OpenGEU,Linux Mint等)来说,内核编译安装比较简单,使用以下命令,可直接编译生成用于安装的debian包(.deb),安装过程也无需额外设置,若读者使用的不是Ubuntu系统,请看后面的分步安装内核。
$sudo apt-get install dpkg-deb fakeroot
$ CONCURRENCY_LEVEL=-j$(nproc) make-kpkg --rootcmd fakeroot --initrd --revision=1.0.0 kernel_image kernel_headers
或者
$ make -j$(nproc) deb-pkg
编译时间取决于主机配置,编译完成后会在源码目录的上级目录生成内核安装包,笔者这里如下:
$ls
linux-headers-4.19.114_1.0.0_amd64.deb linux-image-4.19.114_1.0.0_amd64.deb
使用dpkg命令安装内核(需要超级权限):
$sudo dpkg -i linux-headers-4.19.114_1.0.0_amd64.deb linux-image-4.19.114_1.0.0_amd64.deb
安装后直接重启,grub高级选项中选择新安装的内核启动即可。
若不想使用deb的方式安装,也可通过如下步骤安装:
- 编译:
$make -j$(nproc)
使用-j
启动多线程编译,其中命令nproc
得到机器逻辑CPU核数。编译后编译内核模块:
$make modules_install
- 安装:
$sudo make install
$sudo mkinitramfs -o /boot/initrd.img-4.18.14
$sudo update-initramfs -c -k 4.18.14
- 配置grub引导:
$sudo update-grub
b) 分步编译内核并安装
上面的步骤只适用于基于debian衍生的X86系统,其中诸如命令update-grub
其实是对原始的装步骤的脚本封装,更为原始的内核编译安装步骤如下,理论上支持所有x86系统。
- 编译
$make -j$(nproc)
使用-j
启动多线程编译,其中命令nproc
得到机器逻辑CPU核数。编译后编译内核模块:
$make modules_install
- 安装
拷贝内核到/boot目录
$sudo cp -iv arch/x86/boot/bzImage /boot/vmlinuz-4.19.114-xenomai-3.1
拷贝内核符号文件System.map
(可省略):
$sudo cp -iv System.map /boot/System.map-4.19.114-xenomai-3.1
拷贝.config文件(可省略):
$sudo cp -iv .config /boot/config-4.19.114-xenomai-3.1
安装内核文档(可省略):
$sudo install -d /usr/share/doc/linux-4.19.114
$sudo cp -r Documentation/* /usr/share/doc/linux-5.5.3
- 配置grub引导:
$sudo grub-mkconfig -o /boot/grub/grub.cfg
安装后直接重启,grub高级选项中选择新安装的内核启动即可,下面编译安装用户空间实时库libcobalt。
四、安装xenomai库
4.1 编译安装实时库libcobalt
同样,如果你使用的是Ubuntu系统的话,xenomai库可直接编译生成安装包,否则的话需要一步一步配置编译、安装、设置环境变量。
a) 编译构建xenomai库debian安装包
进入xenomai源码目录:
$cd /home/work/xenomai/xenomai-3.1
- 编译
直接执行debain包编译命令:
$debuild -us -uc
若找不到该命令则需要安装
$sudo apt-get install devscripts
编译后同样会在上级目录生成debian安装包如下:
$ ls xenomai*.deb
libxenomai1_2.99.0_amd64.deb xenomai-kernel-source_2.99.0_all.deb
libxenomai-dev_2.99.0_amd64.deb xenomai-runtime_2.99.0_amd64.deb
libxenomai1_2.99.0_amd64.deb
:Xenomai的共享库;
xenomai-kernel-source_2.99.0_all.deb
:xenomai内核源码;
libxenomai-dev_2.99.0_amd64.deb
:xenomai头文件和静态库;
xenomai-runtime_2.99.0_amd64.deb
:xenomai运行时组件;
对于开发环境,需要安装xenomai-kernel-source_2.99.0_all.deb
和libxenomai-dev_2.99.0_amd64.deb
,对于生产系统,只需要安装xenomai-runtime_2.99.0_amd64.deb
和libxenomai1_2.99.0_amd64.deb
。
- 安装
直接使用dpkg
安装:
sudo dpkg -i libxenomai1_2.99.0_amd64.deb xenomai-kernel-source_2.99.0_all.deb libxenomai-dev_2.99.0_amd64.deb xenomai-runtime_2.99.0_amd64.deb
这种方法安装的xenomai库与b)方法安装的位置不同,不需要额外设置环境变量,因为debian包安装的时候已经通过hook脚本自动设置了,感兴趣可以使用dpkg-deb -R
将libxenomai1_2.99.0_amd64.deb
解包,查看其hook脚本。进入xenomai测试程序目录/usr/lib/xenomai/testsuite/
(该目录没有在环境变量内,所以需要进入目录后执行),运行latency
,测试xenomai实时任务定时延迟。
/usr/lib/xenomai/testsuite$ ./latency
== Sampling period: 100 us
== Test mode: periodic user-mode task
== All results in microseconds
warming up...
RTT| 00:00:11 (periodic user-mode task, 100 us period, priority 99)
RTH|----lat min|----lat avg|----lat max|-overrun|---msw|---lat best|--lat worst
b) 分步编译安装xenomai库
对于非基于debian的发行版或是嵌入式系统,需要一步一步配置、编译、安装、配置环境变量来完成。
进入xenomai源码目录:
$cd /home/work/xenomai/xenomai-3.1
- 配置:
./configure --enable-pshared --enable-smp --with-core=cobalt
通过./configure --help
可查看配置帮助,配置说明更多参考xenomai官方安装文档,这里不再说明。
- 创建一个临时安装目录
mkdir -p build
- 编译安装到这个目录:
make -j$(nproc) DESTDIR=`pwd`/build install
编译安装后,xenomai库等文件在build/
目录下,将build
文件夹下所有内容拷贝到rootfs(目标根文件系统)中即可。临时安装到build目录的目的是,如果需要在其他机器上部署,可不用再次编译,直接将该目录内容拷贝到目标文件系统根目录即可。
$sudo cp -R build/* rootfs/usr/
也可以直接编译安装到系统中:
make -j$(nproc) install
- 配置环境变量:
在目录/etc/profile.d/
下创建文件xenomai环境变量文件xenomai.sh
,文件内容如下:
#fix paths for xenomai
export XENOMAI_ROOT_DIR=/usr/xenomai
export XENOMAI_PATH=/usr/xenomai
export PATH=$PATH:$XENOMAI_PATH/bin:$XENOMAI_PATH/sbin
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$XENOMAI_PATH/lib/pkgconfig
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$XENOMAI_PATH/lib
export OROCOS_TARGET=xenomai
#add some aliases convenient for xenomai
alias xeno-stat="cat /proc/xenomai/sched/stat"
alias xeno-threads="cat /proc/xenomai/sched/threads"
alias xeno-rt-threads="cat /proc/xenomai/sched/rt/threads"
alias xeno-interrupts="cat /proc/xenomai/irq"
alias xeno-version=/usr/xenomai/sbin/version
alias xeno-autotune=/usr/xenomai/sbin/autotune
alias xeno-latency=/usr/xenomai/bin/latenc
前半部分是xenomai环境变量,后半部分是常用的命名别名(快捷命令),具体含义后面的文章会介绍到;
由于xenomai实时任务是在linux软实时任务基础上创建的,而linux实时任务的创建需要权限,所以还需要配置用户组允许非root用户运行实时任务。创建用户组xenomai,并将当前非root用户与root用户加入用户组xenomai。
$sudo addgroup xenomai --gid 1234
$sudo addgroup root xenomai
$sudo usermod -a -G xenomai $USER
配置grub配置文件 /etc/default/grub
,在linux命令行参数中添加用户组信息xenomai.allowed_group=1234
,其中1234表示用户组ID,如下:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash xenomai.allowed_group=1234"
更新grub:
$sudo grub-mkconfig -o /boot/grub/grub.cfg
或
$sudo update-grub
重新启动选择xenomai内核,进入系统打开终端,直接执行latency
测试xenomai实时性。
$ latency
== Sampling period: 100 us
== Test mode: periodic user-mode task
== All results in microseconds
warming up...
RTT| 00:00:11 (periodic user-mode task, 100 us period, priority 99)
RTH|----lat min|----lat avg|----lat max|-overrun|---msw|---lat best|--lat worst
五、X86 平台xenomai实时性测试
下面是笔者一台工控板上的测试数据,供大家参考。
使用的环境如下:
CPU | intel 赛扬 3865U@1.8GHZ |
Kernel | Linux 4.4.200 |
操作系统 | Ubuntu 16.04 |
内存 | 8GB DDR3-1600 双通道 |
存储 | 64GB EMMC |
测试条件:一个QT应用程序绘制2维曲线图,只有QT CPU占用率就达到99%,在此基础上使用stress添加压力,创建10个CPU密集型任务(不断计算平方根),4个内存压力任务(不断的执行内存分配-赋值-读取校验-释放操作,每次操作内存大小为256MB)。
stress -c 10 -m 4
测试时间:211:04:55
测试命令:
latency -t0 -p 100 -P 99 -h -g result.txt
测试应用空间程序,优先级99,任务周期100us,测试结果输出到文件result.txt。经过接近10天的测试后,文件result.txt中latency分布结果如下:
# 211:04:55 (periodic user-mode task, 100 us period, priority 99)
# ----lat min|----lat avg|----lat max|-overrun|---msw|
# 0.343| 1.078| 23.110| 0| 0|
# Xenomai version: Xenomai/cobalt v3.1
# Linux 4.19.114-xeno
......
# I-pipe releagese #20 detected
# Cobalt core 3.1 detected
# Compiler: gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.12)
# Build args: --enable-smp --enable-pshared --enable-tls
PKG_CONFIG_PATH=:/usr/xenomai/lib/pkgconfig:/usr/xenomai/lib/pkgconfig0 1
0.5 1599357037
1.5 1621130106
2.5 56618753
3.5 4386985
4.5 3848531
5.5 3556704
6.5 3353649
7.5 3033218
8.5 2560133
9.5 2035075
10.5 1516866
11.5 1038989
12.5 680815
13.5 417124
14.5 224296
15.5 115165
16.5 58075
17.5 27669
18.5 11648
19.5 4648
20.5 1646
21.5 467
22.5 38
23.5 1
其中第一列数据表示latency的值,第二列表示该值与上一个值之间这个范围的latency出现的次数,最小0.343us,平均latency 1.078us,最大23.110us。系统高负载情况下还能有这么好的表现,可见xenomai的实时性还是挺不错的。
这还只是xenomai应用空间任务的实时性表现,如果使用内核空间任务会更好。当然这只能说明操作系统能提供的实时性能,具体的还要看应用程序的设计等等。
此外,X86平台实时性与BIOS有很大关系,通常BIOS配置CPU具有更高的吞吐量,例如超线程等,毕竟BIOS不是普通开发者能接触到的,如果能让BIOS对CPU针对实时系统配置的话,实时性会更好。目前我见到的x86平台加各种压力测试几天,用户态latency最大几us,平均600纳秒左右,内核态就更不用说了
六、arm架构安装xenomai
主要是事先移植linux内核和u-boot,它们跑起来后才能进行xenomai实时性改造。其他的就与上面步骤大同小异。步骤如下:
a)对移植好的linux内核打ipipe补丁。
b)打xenomai cobalt内核补丁。
c)交叉编译(普通嵌入式内核编译)
d)安装zImage,若有内核模块安装内核模块
e)交叉编译xenomai库,这里以cortex-A8为例:
配置
cd xenomai-3.1
./configure CFLAGS="-march=armv7-a -mtune=cortex-a8 -mfloat-abi=hard -mfpu=neon -ffast-math" --host=arm-linux-gnueabihf --with-core=cobalt --enable-smp
--host=
参数指定交叉编译工具链,CFLAGS=
指定目标架构,是否使用硬浮点等。创建一个临时安装目录
mkdir -p build-arm
- 编译安装到build-arm目录:
make -j$(nproc) DESTDIR=`pwd`/build-arm install
编译安装后,xenomai库等文件在$(pwd)/build/xenomai
目录下,将xenomai
文件夹拷贝到rootfs/usr
中即可。
sudo cp -R build-arm/xenomai rootfs/usr/
或者将xenomai
文件夹进行压缩,然后需要时直接解压到rootfs /usr
中,这种方式便于后续安装。
cd build
sudo tar -czpvf xenomai-arm-3.1.tar.gz xenomai
解压到rootfs:
cd rootfs
sudo tar -xpvf xenomai-arm-3.1.tar.gz -C usr/
f)配置环境变量
与上面一样,在目录/etc/profile.d/
下创建文件xenomai环境变量文件xenomai.sh
,文件内容如下:
#fix paths for xenomai
export XENOMAI_ROOT_DIR=/usr/xenomai
export XENOMAI_PATH=/usr/xenomai
export PATH=$PATH:$XENOMAI_PATH/bin:$XENOMAI_PATH/sbin
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$XENOMAI_PATH/lib/pkgconfig
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$XENOMAI_PATH/lib
export OROCOS_TARGET=xenomai
#add some aliases convenient for xenomai
alias xeno-stat="cat /proc/xenomai/sched/stat"
alias xeno-threads="cat /proc/xenomai/sched/threads"
alias xeno-rt-threads="cat /proc/xenomai/sched/rt/threads"
alias xeno-interrupts="cat /proc/xenomai/irq"
alias xeno-version=/usr/xenomai/sbin/version
alias xeno-autotune=/usr/xenomai/sbin/autotune
alias xeno-latency=/usr/xenomai/bin/latenc
也可将这些内容直接放到/etc/profile中。
g)配置linux命令行参数
arm嵌入式系统一般都是root用户,不需要设置用户组,如果不是,请如上文所示建立用户组。修改u-boot向内核传递内核参数,或者修改设备树节点,添加内核参数属性并赋值。
更多参考:http://wiki.csie.ncku.edu.tw/embedded/xenomai
七、ARM 平台xenomai实时性测试
CPU | 双核cortex-A15@1.5GHZ |
Kernel | Linux 4.19.85 + xenomai 3.1 |
内存 | 2GB DDR3 |
存储 | 4GB EMMC |
以下均在压力stress -c 10 -m 4
下测试,时间2小时,定时周期100us,优先级99。
7.1 IRQ-timer handler
# 02:00:00 (in-kernel timer handler, 100 us period, priority 99)
# ----lat min|----lat avg|----lat max|-overrun|---msw|
# 0.325| 0.768| 6.859| 0| 0|
# Xenomai version: Xenomai/cobalt v3.1
.....
0 1
0.25 979922
0.75 69023222
1.25 1468209
1.75 314001
2.25 118087
2.75 52695
3.25 9272
3.75 2163
4.25 5333
4.75 2638
5.25 18381
5.75 5633
6.25 18
6.75 15
7 1
7.2 内核态任务
# 01:33:21 (in-kernel periodic task, 100 us period, priority 99)
# ----lat min|----lat avg|----lat max|-overrun|---msw|
# -0.282| 0.643| 10.519| 0| 0|
# Xenomai version: Xenomai/cobalt v3.1
....
0 1
0.25 37403654
0.75 5725957
1.25 5300392
1.75 3143282
2.25 2329224
2.75 1360290
3.25 511552
3.75 135384
4.25 37234
4.75 42208
5.25 18950
5.75 4495
6.25 532
6.75 295
7.25 172
7.75 43
8.25 13
8.75 6
9.25 1
9.75 3
10.25 1
10.75 2
11 1
7.3 用户态任务
# 02:00:00 (periodic user-mode task, 100 us period, priority 99)
# ----lat min|----lat avg|----lat max|-overrun|---msw|
# 0.422| 3.605| 13.328| 0| 0|
# Xenomai version: Xenomai/cobalt v3.1
.....
0 1
0.25 2
0.75 44
1.25 137
1.75 1540
2.25 13471
2.75 1943224
3.25 38106382
3.75 19789463
4.25 6749386
4.75 2940300
5.25 1812680
5.75 549134
6.25 47176
6.75 18063
7.25 16545
7.75 9921
8.25 1391
8.75 389
9.25 132
9.75 97
10.25 104
10.75 46
11.25 18
11.75 21
12.25 6
12.75 4
13.25 2
13.5 1
基于arm平台xenomai与VxWorks 实时性能对比,可参见本博客其他文章。
参考链接:
https://gitlab.denx.de/Xenomai/xenomai/wikis/home
https://gitlab.denx.de/Xenomai/xenomai/wikis/Start_Here
【原创】xenomai3.1+linux构建linux实时操作系统-基于X86_64和arm的更多相关文章
- 【原创】linux实时操作系统xenomai x86平台基准测试(benchmark)
一.前言 benchmark 即基准测试.通常操作系统主要服务于应用程序,其运行也是需要一定cpu资源的,一般来说操作系统提供服务一定要快,否则会影响应用程序的运行效率,尤其是实时操作系统.所以本文针 ...
- Linux以外的开源操作系统大汇总
开源操作系统即公开源代码的操作系统软件,它遵循开源协议使用.编译和发布.自由和开放源代码软件中最著名的是Linux,它是一种类Unix的操作系统.Linux可安装在各种计算机硬件设备中,比如手机.平板 ...
- Linux发行版Debian操作系统破译密码
Linux发行版Debian操作系统破译密码 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 其实玩过Linux的小伙伴,对破解服务器密码都应该有所了解,典型的两个代表,我觉得一个是 ...
- Linux 网络流量实时监控工具之ntopng详解
大纲一.前言二.ntopng 简介三.ntopng 功能说明 四.ntopng 安装详解五.ntopng 配置详解 六.ntopng 使用详解注,操作系统 CentOS 5.5 X86_64,软件版本 ...
- 使用 firewalld 构建 Linux 动态防火墙
firewalld 是新一 Linux 代防火墙工具,它提供了支持网络 / 防火墙区域 (zone) 定义网络链接以及接口安全等级的动态防火墙管理工具.它也支持允许服务或者应用程序直接添加防火墙规则的 ...
- 从零开始构建Linux
目的:深入了解以Linux内核为基础的系统是如何组成,运行,以构建一个最基础的,纯净的系统. LFS构建步骤宿主机准备- linux操作系统安装- 使用独立硬盘,创建分区- 配置用户和组- 下载所有需 ...
- linux网络流量实时监控工具之iptraf
这个工具还是很强大 linux网络流量实时监控工具之iptraf [我的Linux,让Linux更易用]IPTraf是一个网络监控工具,功能比nload更强大,可以监控所有的流量,IP流量,按协议分的 ...
- 构建LINUX下的入侵检测系统——LIDS 系统管理命令--vlock
构建LINUX下的入侵检测系统——LIDS 系统管理命令--vlock http://blog.chinaunix.net/uid-306663-id-2440200.html LIDS官方网站: ...
- 运行预构建 Linux 映像的 Windows Azure 虚拟机中的交换空间 – 第 1 部分
本文章由 Azure CAT 团队的 Piyush Ranjan (MSFT) 撰写. 随着基础结构服务(虚拟机和虚拟网络)近期在 Windows Azure 上正式发布,越来越多的企业工作负荷正在向 ...
随机推荐
- Maven是什么? Maven的概念+作用+仓库的介绍+常用命令
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型.一组标准集合,一个依赖管理系统.和用来运行定义在生命周期阶段中插件目标和逻辑. 核心功能 Maven的核心 ...
- ui自动化--鼠标操作ActionChains
需要先引入鼠标操作模块:from selenium.webdriver.common.action_chains import ActionChains 实际上ActionChains这个模块的实现的 ...
- 微信小程序-组件-视图容器
1.view 1.作用:类似 html 的 div 用来进行页面布局,具有块级盒子特性. 2.常用属性:设置view盒子点击后的状态,以及控制是否影响父盒子的点击状态 3.eg:<view ho ...
- 2020重新出发,JAVA高级,JVM种设计模式
Java的23种设计模式全面解析 设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路.它不是语法规定,而是一套用来提高代码可复用性.可维护性.可读性.稳健 ...
- tomcat在linux服务器启动时报错Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000794500000, 576716800, 0) failed; error='Cannot allocate memory' (errno=12)
原因是内存不足了 解决办法:1.top命令查看后台进程,看哪些可以关闭 2.ps -ef |grep tomcat看哪些不用的tomcat起着,也可以从这里关 3.加大这个tomcat的内存, 在ca ...
- Java审计之命令执行篇
Java审计之命令执行篇 0x00 前言 在Java中能执行命令的类其实并不多,不像php那样各种的命令执行函数.在Java中目前所知的能执行命令的类也就两种,分别是Runtime和 ProcessB ...
- jpeg软解码实现介绍
我的月经贴博客该更新了!!!已经有许多博文需要补了! 去年开始的jpeg解码项目,中间停止更新了大半年时间,上个月想起这事还没完工,就又做了更多兼容性和性能上的改进,目前终于接近尾声了.有需要参考的可 ...
- Aop的学习与使用
什么是aop AOP(Aspect Oriented Programming)意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一 ...
- Java基础一篇过(六)Java8--lambda表达式
一.简介 lambda表达式是Java8的一个重要特性,也可以称为闭包,常用于配合Java8的Stream对集合元素进行操作,使得代码更简介紧凑. 二.代码解析 虽说lambda表达式是一个新的特性, ...
- ZooKeeper学习(一)了解ZooKeeper
一.什么是ZooKeeper ZooKeeper主要服务于分布式系统,可以用ZooKeeper来做:统一配置管理.统一命名服务.分布式锁.集群管理. 使用分布式系统就无法避免对节点管理的问题(需要实时 ...