Linux-Kernel-UART

In eingebetteten Systemen kann der serielle Port zur Ausgabe von Protokollen zum System-Debugging und auch für die Kommunikation über kurze Distanzen mit niedriger Geschwindigkeit verwendet werden.

In diesem Artikel werden Funktionen vorgestellt , die auf dem Single-Board- Kernel basieren.RockPI 4ALinux 4.4RK3399 UART

1. Einführung in UART

UART(Universal Asynchronous Receiver/Transmitter): Universeller asynchroner Empfänger-Sender, geeignet für die serielle und Vollduplex-Datenübertragung über kurze Distanzen mit niedriger Geschwindigkeit.

In China bezieht sich der Begriff „serieller Anschluss“ im Allgemeinen auf den seriellen Kommunikationsanschluss. Es gibt 9 Pins mit Ebenen.PCCOMRS-232

In eingebetteten Systemen bezieht sich der serielle Port im Allgemeinen auf Port. Im Allgemeinen werden 3 Pins und Ebenen verwendet.UARTTTL

TTL/RS-232/RS-485Bezogen auf den Niveaustandard ist der Unterschied wie folgt:

Niveaustandard logisch 0 Logik 1 Übertragungsmethode
TTLEbene 0 ~ 0.4V 2.4 ~ 5V Vollduplex
RS-232Ebene 3 ~ 15V -15 ~ -3V Vollduplex
RS-485Ebene -6 ~ -2V 2 ~ 6V Halbduplex (differentielle Übertragung, größere Entfernung)

Beim Debuggen der eingebetteten Einzelplatine können Sie das Modul auswählen, um die serielle Kommunikation mit der Einzelplatine zu implementieren, wie in der folgenden Abbildung dargestellt:USB转TTLPC

RK3399 UARTController-Funktionen:

1. Unterstützt 5-Wege-serielle Schnittstelle.

2. Übertragungsmodus unterstützen oder unterbrechen.DMA

3. Unterstützt zwei 64-Byte-Senden und -Empfang .FIFO

4. Unterstützt 5/6/7/8 serielles Senden oder Empfangen von Daten.bit

5. Unterstützt standardmäßige asynchrone Kommunikationsbits wie Start, Stopp und Paritätsprüfung.

6. Die maximale Taktbaudrate kann bis zu 4 unterstützt werden.Mbps

7. Unterstützt den automatischen Flusskontrollmodus.UART0/3

RK3399 UARTDie Pin-Beschreibung ist in der folgenden Abbildung dargestellt:

2. UART-Verbindung

ROCKPi 4ADas Board verfügt über einen 40-Pin-Erweiterungsport, wie im Bild unten gezeigt:radxa

RockPI 4ADie einzelne Platine wird als serieller Debug-Port verwendet, und die Pin-Verbindungsmethode für die Konvertierung in einen seriellen Port ist wie folgt:UART2USBTTL

RockPI4A-Einzelplatine Serieller USB-zu-TTL-Anschluss
PIN8 (UART2_TXD) RXD
PIN9 (GND) GND
PIN10 (UART2_RXD) TXD

RockPI 4ADie Debugging-Konfiguration der seriellen Schnittstelle der einzelnen Platine ist in der folgenden Abbildung dargestellt:

Beim Anschließen der seriellen Schnittstelle müssen Sie zunächst sicherstellen, dass die Verbindung korrekt ist, und dann prüfen, ob die Pin-Ebenen der seriellen Schnittstelle kompatibel sind und ob die Parameterkonfiguration der seriellen Schnittstelle korrekt ist. Andernfalls ist die serielle Schnittstelle möglicherweise nicht verfügbar oder verstümmelt.GND

3. UART-Konfiguration

Nehmen Sie als Beispiel eine einzelne Platine, um die Konfiguration in der Einleitung zu konfigurieren .ROCKPI 4ARK3399 DTSUART

3.1. Alias ​​der seriellen Schnittstelle

Gewöhnliche Geräte mit serieller Schnittstelle werden entsprechend der Nummer der seriellen Schnittstelle nummeriert und als entsprechendes Gerät registriert .dtsaliasesserialxttySx

Konfigurationsdatei: .arch/arm64/boot/dts/rockchip/rk3399.dtsi

RK3399 DTSist wie folgt definiert :aliases

    Aliase { 
... serial0 = &uart0; serial1 = &uart1; serial2 = &uart2; serial3 = &uart3; serial4 = &uart4; };        
        
        
        
        
        
    

Wenn Sie die Änderung als registrieren , können Sie die folgenden Änderungen vornehmen:UART4ttyS1

    aliases { 
... serial0 = &uart0; serial1 = &uart4 ## Verwenden Sie uart4, um uart1 zu ersetzen ... serial4 = &uart1 };        
        
        
        
        
    

3.2. Konfiguration der seriellen Schnittstelle

Konfigurationsdatei: .arch/arm64/boot/dts/rockchip/rk3399.dtsi

UART0 dtsDie Konfiguration ist wie folgt:

    uart0: serial@ff180000 { 
kompatibel = "rockchip,rk3399-uart", "snps,dw-apb-uart"; reg = <0x0 0xff180000 0x0 0x100>; ## uart0 Registeradresse 0xff180000 und Zuordnungsgröße 0x100 Uhren = <&cru SCLK_UART0 >, <&cru PCLK_UART0>; ## Der von uart0 verwendete Taktgeber = "baudclk", "apb_pclk"; <GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH 0>; , DMA-Modus wird nicht verwendet reg-shift = <2>; ## Die Registeradresse wird um 2 Bit versetzt, dh offset+4 reg-io-width = <4> ; . pinctrl-names = "default"; pinctrl-0 = <&uart0_xfer &uart0_cts &uart0_rts>; ## uart0 verwendet den Flusskontroll-Pin status = "disabled" };        
                       
          
        
        
                    
                 
        
        
        
    

UART0 pinmuxKonfiguration, einschließlich Flusskontrollstiften .cts/rts

    uart0 { 
        uart0_xfer: uart0-xfer { 
            rockchip,pins = 
                <2 16 RK_FUNC_1 &pcfg_pull_up>, 
                <2 17 RK_FUNC_1 &pcfg_pull_none>; 
        }; 
​uart0_cts
        : uart0-cts { 
            rockchip,pins = 
                <2 18 RK_FUNC_1 &pcfg_pull_none>; 
        }; 
​uart0_rts
        : uart0-rts { 
            rockchip,pins = 
                <2 19 RK_FUNC_1 &pcfg_pull_none>; 
        }; 
    };

Notiz:

RK3399 UART0Die Interrupt-Nummer ist 131. Die Interrupt-Nummer beginnt bei 32 und die Interrupt-Nummer in beginnt standardmäßig bei 0. Die konfigurierte Interrupt-Nummer lautet also: 131-32, also 99.SPIdtsSPIUART0

Nach dem Systemstart können Sie die Interrupts der seriellen Schnittstelle (131 und 132) anzeigen:

root@xiaotianbsp:/# cat proc/interrupts 
           CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 
14: 0 0 0 0 0 0 GICv3 29 Edge arch_timer 
... 
35: 16 0 0 0 0 0 GICv3 131 Level serial 
... 
222: 301 0 0 0 0 0 GICv3 132 Level debug 
... 
Fehler: 0

3.3. Aktivierung der seriellen Schnittstelle

Konfigurationsdatei: .arch/arm64/boot/dts/rockchip/rockpi-4-linux.dtsi

UART0 dtsDie Aktivierungskonfiguration ist wie folgt:

&uart0 { 
    pinctrl-names = "default"; 
    pinctrl-0 = <&uart0_xfer &uart0_cts>; 
    ## okay: Funktion der seriellen Schnittstelle einschalten; 
}; 
&
 uart2 { 
    status = "okay" ## Serielle Schnittstelle 2 aktivieren 
};

Notiz:

status = "okay"oder , kann aber nicht verwendet werden ."ok"enable

Der Kernel-Parsing-Code lautet wie folgt:

static bool __of_device_is_available(const struct device_node *device) 
{ 
    ... 
    status = __of_get_property(device, "status", &statlen); 
    ... 
​if
     (statlen > 0) { 
if (!strcmp(status, "okay") || !strcmp(status, "ok")) return true; } ​return false; }        
            
    

    

3.4、ttyFIQ0

Das System wird als Gerät verwendet./dev/ttyFIQ0console

Konfigurationsdatei: Der Inhalt lautet wie folgt:arch/arm64/boot/dts/rockchip/rockpi-4-linux.dtsi

    fiq_debugger: fiq-debugger { 
status = "disabled"; kompatibel = "rockchip,fiq-debugger" ; und schalten Sie gleichzeitig den Pinmux des seriellen Ports um rockchip ,signal-irq = <0> ; * Wenn enable uart irq anstelle von fiq verwendet */ rockchip ,baudrate = <1500000>; * Nur 115200 und 1500000 */ pinctrl -0 = <&uart2c_xfer>; -Ausweis };                    
        
               
        
        
        
        
        
             
    

RockPI 4ALegen Sie die Parameter für das vom Board verwendete System in der Konfigurationsdatei fest.Debianextlinux.confconsole

root@xiaotianbsp:/boot/extlinux# cat extlinux.conf 
Timeout 10 
Menütitel Select Kernel 
​Label
 Kernel-4.4.154-90-rockchip-ga14f6502e045 
    Kernel /vmlinuz-4.4.154-90-rockchip-ga14f6502e045 
    Devicetreedir /dtbs/4.4 .154-90-rockchip-ga14f6502e045 
    ## Early Printk aktivieren, ttyFIQ0 wird als Konsolengerät verwendet, die Baudrate des seriellen Ports beträgt 1,5 MB, 8 Datenbits, 1 Stoppbit, 
    frühes Drucken anhängen console=ttyFIQ0,1500000n8 init=/sbin/ init root=PARTUUID=b921b045-1d rw rootwait rootfstype=ext4

Nachdem das System gestartet ist, können Sie es durchsehen.cmdline

root@xiaotianbsp:~# cat /proc/cmdline 
Earlyprintk console=ttyFIQ0,1500000n8 init=/sbin/init root=PARTUUID=b921b045-1d rw rootwait rootfstype=ext4

4. UART-Treiber

RK3399 Linux4.4Der Kernel- Treiber verwendet den 8250-Universaltreiber, der Typ ist . Hauptimplementierungsdateien:UART16550A

drivers/tty/serial/8250/8250_dma.c ## UART-DMA-Implementierung 
drivers/tty/serial/8250/8250_dw.c ## Synopsys DesignWare 8250 serieller Port-Treiber 
drivers/tty/serial/8250/8250_early.c ## frühe Konsole Implementierung 
drivers/tty/serial/8250/8250_port.c ## Verwandte Schnittstellen für die UART-Port-Konfiguration

UARTTreiber und Debugging werden später vorgestellt.

5. Debuggen des Kernel-Protokolls

In eingebetteten Systemen wird am häufigsten die serielle Schnittstelle zur Ausgabe von Kernel-Protokollen für das Funktionsdebuggen verwendet.Linux

5.1、printk

Im Kernel stehen Funktionen zur Ausgabe von Kernel-Informationen an den Kernel-Informationspuffer zur Verfügung.Linuxprintk()

Die Kernel-Protokollausgabe ist in verschiedene Ebenen unterteilt, Definitionsdatei:, einschließlich:include/linux/kern_levels.h

#define LOGLEVEL_EMERG 0 /* System ist unbrauchbar */ 
#define LOGLEVEL_ALERT 1 /* Maßnahmen müssen sofort ergriffen werden */ 
#define LOGLEVEL_CRIT 2 /* kritische Bedingungen */ 
#define LOGLEVEL_ERR 3 /* Fehlerbedingungen */ 
#define LOGLEVEL_WARNING 4 /* Warnbedingungen */ 
#define LOGLEVEL_NOTICE 5 /* normale, aber wichtige Bedingung */ 
#define LOGLEVEL_INFO 6 /* informativ */ 
#define LOGLEVEL_DEBUG 7 /* Meldungen auf Debug-Ebene */

Zusätzlich zu den Funktionen können Sie auch und verwenden .printk()pr_**()dev_**()

pr_**Definitionsdatei: Das Makro ist wie folgt definiert:include/linux/printk.h

#define pr_emerg(fmt, ...) \ 
    printk(KERN_EMERG pr_fmt(fmt), ##__VA_ARGS__) 
#define pr_alert(fmt, ...) \ 
    printk(KERN_ALERT pr_fmt(fmt), ##__VA_ARGS__) 
#define pr_crit( fmt, ...) \ 
    printk(KERN_CRIT pr_fmt(fmt), ##__VA_ARGS__) 
#define pr_err(fmt, ...) \ 
    printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__) 
#define pr_warning(fmt, .. .) \ 
    printk(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__) 
#define pr_warn pr_warning 
#define pr_notice(fmt, ...) \ 
    printk(KERN_NOTICE pr_fmt(fmt), ##__VA_ARGS__) 
#define pr_info(fmt, .. .) \ 
    printk(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__)

dev_**Definitionsdatei: Die Funktion ist wie folgt definiert:drivers/base/core.c

#define define_dev_printk_level(func, kern_level) \        
void func(const struct device *dev, const char *fmt, ...)    \ 
{ \                                
    struct va_format vaf; \                    
    va_list args; \                        
\ va_start(args, fmt); \ \ vaf.fmt = fmt; \ vaf.va = &args; \ \ __dev_printk(kern_level, dev, &vaf); \ \ va_end(args); \ } \ EXPORT_SYMBOL(func); ​define_dev_printk_level (dev_emerg, KERN_EMERG); define_dev_printk_level(dev_alert, KERN_ALERT); define_dev_printk_level(dev_crit, KERN_CRIT); define_dev_printk_level(dev_err, KERN_ERR); define_dev_printk_level(dev_warn, KERN_WARNING); define_dev_printk_level(dev_notice, KERN_NOTICE); define_dev_printk_level(_dev_info, KERN_INFO);                                
                        
                                
                          
                         
                                
                
                                
                           
                               








5.1.1. Protokollausgabeebene

Die Ausgabestufe des Kernel-Protokolls kann durch Ändern des Werts von oder angepasst werden.loglevel/proc/sys/kernel/printk

Bevor das System startet, können Sie die Protokollausgabe der seriellen Schnittstelle über die Konfiguration anpassen.loglevel

root@xiaotianbsp:~# cat /boot/extlinux/extlinux.conf 
... 
label kernel-debug 
    kernel /debug/Image 
    fdt /debug/rk3399-rock-pi-4a.dtb 
    ## Ändern Sie die Protokollebene, um die Ausgabe der seriellen Schnittstelle anzupassen Protokollebene 
    anhängen Earlyprintk Console=ttyFIQ0,1500000n8 Protokollebene=4 init=/sbin/init root=PARTUUID=b921b045-1d rw rootwait rootfstype=ext4 no_console_suspend initcall_debug

Andere Systeme (wie: oder ) werden im Allgemeinen in geändert .Ubuntun、BuildrootAndroidbootargsloglevel

Notiz:

no_console_suspendWird für das Debuggen der Energieverwaltung des Linux-Systems verwendet. Dies bedeutet, dass die serielle Schnittstelle nach dem Ruhezustand (Suspendieren) des Systems nicht in den Ruhezustand wechselt und weiterhin ausgeben kann.

Nach dem Systemstart kann der Protokollausgabepegel der seriellen Schnittstelle auch dynamisch angepasst werden.

root@xiaotianbsp:/proc/sys/kernel# cat printk 
7 4 1 7 
root@xiaotianbsp:/proc/sys/kernel# echo 4 > printk 
root@xiaotianbsp:/proc/sys/kernel# cat printk 
4 4 1 7

printkDie Zahlen in entsprechen den verschiedenen Protokollierungsstufen. Ändern Sie einfach die Protokollierungsstufe des Ports.console

int console_printk[4] = { 
        CONSOLE_LOGLEVEL_DEFAULT, /* console_loglevel */   ## Konsolenprotokollebene         
        MESSAGE_LOGLEVEL_DEFAULT, /* default_message_loglevel */   ## Standardnachrichtenprotokollebene 
        CONSOLE_LOGLEVEL_MIN, /* Minimum_console_loglevel */ ## Minimale Konsolenprotokollebene 
        CONSOLE_LOGLEVEL_DEFAULT, /* default_console_loglevel */ ##Standardprotokollebene der Konsole 
};

5.1.2. Zeitstempel protokollieren

Nach dem Systemstart kann die Anzeige der Kernel-Log-Zeitstempel dynamisch angepasst werden.

## 1. Der Zeitwert ist Y, was bedeutet, dass der Zeitstempel 
root@xiaotianbsp:/# cat /sys/module/printk/parameters/time 
Y 
## 2. Zu diesem Zeitpunkt zeigt das Protokoll einen Zeitstempel 
root@xiaotianbsp:/ # find . -name time 
[ 1719.836194] FAT-fs (sda4): Fehler, ungültiger Zugriff auf FAT (Eintrag 0x07b03538) 
[ 1719.836874] FAT-fs (sda4): Fehler, ungültiger Zugriff auf FAT (Eintrag 0x07b03538) 
## 3. Stellen Sie den Zeitwert auf N 
root@xiaotianbsp:/# echo N > /sys/module/printk/parameters/time 
## 4 ein. Zu diesem Zeitpunkt zeigt das Protokoll einen Zeitstempel 
root@xiaotianbsp:/# find -name time 
FAT -fs (sda4): Fehler, ungültiger Zugriff auf FAT (Eintrag 0x07b03538) 
FAT-fs (sda4): Fehler, ungültiger Zugriff auf FAT (Eintrag 0x07b03538)

5.2、dmesg

Wenn Sie nach dem Systemstart die Kernel-Startphase verpasst haben oder einen nicht seriellen Port (z. B. Login) zum Anschließen des Debugging-Boards verwenden, können Sie das Kernel-Protokoll anzeigen.adb/sshdmesg

dmesgDie Nutzung ist wie folgt:

root@xiaotianbsp:/# dmesg -h 
​Verwendung
 : 
dmesg [Optionen] 
​Zeigt
 oder steuert den Kernel-Ringpuffer. 
​Optionen
 : 
-C, --clear löscht den Kernel-Ringpuffer 
-c, --read-clear lesen und löschen alle Nachrichten 
-D, --console-off das Drucken von Nachrichten auf der Konsole deaktivieren 
-E, --console-on das Drucken von Nachrichten auf der Konsole aktivieren 
-F, --file <Datei> die Datei anstelle des Kernel-Protokollpuffers verwenden 
-f, - -facility <list> beschränkt die Ausgabe auf definierte Einrichtungen 
-H, --human menschenlesbare Ausgabe 
-k, --kernel zeigt Kernel-Meldungen 
an -L, --color[=<when>] färbt Meldungen ein (automatisch, immer oder nie) 
                               in Farben sind standardmäßig aktiviert 
-l, --level <list> beschränkt die Ausgabe auf definierte Ebenen 
-n, --console-level <level> legt die Ebene der auf der Konsole gedruckten Nachrichten fest 
-P, --nopager leitet die Ausgabe nicht an einen Pager weiter 
- r, --raw druckt den Rohnachrichtenpuffer 
-S, --syslog erzwingt die Verwendung von syslog(2) anstelle von /dev/kmsg 
-s, --buffer-size <Größe> Puffergröße zum Abfragen des Kernel-Ringpuffers 
-u , --userspace Userspace-Nachrichten anzeigen 
-w, --follow auf neue Nachrichten warten 
-x, --decode Dekodierfunktion und Ebene für lesbare Zeichenfolge 
-d, --show-delta Zeitdifferenz zwischen gedruckten Nachrichten anzeigen 
-e, --reltime lokale Zeit und Zeitdelta in lesbarem Format anzeigen 
-T, --ctime menschenlesbaren Zeitstempel anzeigen (möglicherweise ungenau!) 
-t, --notime keinen Zeitstempel mit Nachrichten anzeigen 
     --time-format <format> Zeitstempel anzeigen unter Verwendung des angegebenen Formats: 
                               [delta|reltime|ctime|notime|iso] 
Durch das Anhalten/Fortsetzen werden ctime- und ISO-Zeitstempel ungenau. 
​-h
 , --help zeigt diese Hilfe an und beendet 
-V, --version gibt Versionsinformationen aus und beendet 
​Unterstützte
 Protokollfunktionen: 
    Kern – Kernel-Nachrichten 
    Benutzer – Zufällige Nachrichten auf Benutzerebene 
    Mail – Mail-System- 
  Daemon – System-Daemons- 
    Authentifizierung – Sicherheits-/Autorisierungsnachrichten 
  Syslog – intern von Syslogd generierte Nachrichten 
     LPR – Zeilendrucker-Subsystem 
    -News – Netzwerk-News-Subsystem 
​Unterstütztes
 Protokoll Stufen (Prioritäten): 
   Emerg – System ist unbrauchbar 
   Alert – Maßnahmen müssen sofort ergriffen werden 
    Crit – Kritische Bedingungen
     err – Fehlerbedingungen 
    Warnung – Warnbedingungen 
  Hinweis – normale, aber wichtige Zustandsinformationen 
    – informatives 
   Debuggen – Meldungen auf Debug-Ebene 
Weitere Einzelheiten finden Sie unter dmesg(1).

5.2.1. Kernel-Protokolle anzeigen

root@xiaotianbsp:/# dmesg 
[ 0,000000] Booten von Linux auf physischer CPU 0x0 
[ 0,000000] Initialisieren von cgroup subsys cpuset 
[ 0,000000] Initialisieren von cgroup subsys cpu 
[ 0,000000] Initialisieren von cgroup subsys cpuacct 
[ 0,000000] Linux-Version 4.4.154-90-rockchip- ga14f6502e045 (root@2705a206000b) (gcc Version 7.3.1 20180425 [linaro-7.3-2018.05 revision d29120a424ecfbc167ef90065c0eeb7f91977701] (Linaro GCC 7.3-2018.05) #22 SMP Di 30. Juli 10:32:28 UTC 2019

5.2.2. Protokollausgabeebene begrenzen

## 仅输出error信息
root@xiaotianbsp:/# dmesg -l err 
[ 2.170152] rockchip-pcie f8000000.pcie: PCIe Link Training Gen1 Timeout! 
[ 2.175658] rk-vcodec ff650000.vpu_service: power_model-Knoten konnte nicht gefunden werden 
[ 2.180010] rk-vcodec ff660000.rkvdec: power_model-Knoten konnte nicht gefunden werden 
[ 2.200359] rockchip-vop ff900000.vop: fehlende rockchip,grf-Eigenschaft 
[ 2.201913] rock Chip- vop ff8f0000.vop: fehlende rockchip,grf-Eigenschaft 
[2.203632] i2c i2c-9: of_i2c: Modalias-Fehler auf /hdmi@ff940000/ports 
[2.240381] mali ff9a0000.gpu: Regler 
[2.240839] mali konnte nicht abgerufen werden. ff9a0000.gpu : Macht Steuerungsinitialisierung fehlgeschlagen 
[2.260317] rk_gmac-dwmac fe300000.ethernet: Uhr clk_mac_speed kann nicht abgerufen werden
## 同时输出error和warning信息
root@xiaotianbsp:/# dmesg -l err,warn 
[ 0,000000] rockchip_clk_register_frac_branch: dclk_vop0_frac konnte nicht als übergeordnetes Element von dclk_vop0 gefunden werden, Ratenänderungen funktionieren möglicherweise nicht 
[ 0,000000] rockchip_clk_register_frac_ Zweig: dclk_vop1_frac konnte nicht als übergeordneter Zweig gefunden werden von dclk_vop1 funktionieren Ratenänderungen möglicherweise nicht 
[ 0,000000] rockchip_cpuclk_pre_rate_change: Begrenzung des Alt-Dividers 33 auf 31 
[ 1,589058] Thermal Thermal_Zone1: Power_Allocator: Sustainable_Power wird geschätzt 
[ 1,637902] phy. phy-ff770000.syscon:[email protected] : Fehler beim Abrufen des VBUS-Versorgungsreglers 
[ 1.639962] phy phy-ff770000.syscon:[email protected]: Fehler beim Abrufen des VBUS-Versorgungsreglers 
[ 2.170152] rockchip-pcie f8000000.pcie: Zeitüberschreitung beim PCIe-Link-Training gen1!

5.2.3. Suchen Sie nach einer bestimmten Information

root@xiaotianbsp:~# dmesg | grep rockchip-vop 
[ 2.197270] rockchip-vop ff900000.vop: fehlende rockchip,grf-Eigenschaft 
[ 2.198853] rockchip-vop ff8f0000.vop: fehlende rockchip,grf-Eigenschaft 
root@xiaotianbsp:~# dmesg | grep xiaotianbsp 
root@xiaotianbsp:~#

5.2.4. Ringpufferinformationen löschen

root@xiaotianbsp:/# dmesg -c 
[ 0,000000] Booten von Linux auf physischer CPU 0x0 
[ 0,000000] Initialisieren von cgroup subsys cpuset 
[ 0,000000] Initialisieren von cgroup subsys cpu 
[ 0,000000] Initialisieren von cgroup subsys cpuacct 
... 
root@xiaotianbsp:/# dmesg 
root @xiaotianbsp:/#

dmesgSie können weitere Verwendungsmöglichkeiten selbst testen.

Hinweis: Bitte geben Sie beim Nachdruck den Autor und die Quelle an.

RustDesk hat den inländischen Dienst Taobao (taobao.com) aufgrund von grassierendem Betrug eingestellt, die Arbeit zur Optimierung der Webversion wurde wieder aufgenommen, Apple veröffentlichte den M4-Chip, High-School-Schüler erstellten im Rahmen einer Coming-of-Age-Zeremonie ihre eigene Open-Source-Programmiersprache – Netizens kommentierten: Verlassen auf Die Verteidigung, Yunfeng sei von Alibaba zurückgetreten und plane, in Zukunft das Ziel für unabhängige Spieleprogrammierer Visual Studio Code 1.89 zu produzieren, wurde von Huawei offiziell bekannt gegeben. Yu Chengdongs Jobanpassung wurde an die „FFmpeg-Säule der Schande“ genagelt „Vor 15 Jahren, aber heute muss er sich bei uns bedanken – Tencent QQ Video rächt seine bisherige Schande?“ Die Open-Source-Spiegelstation der Huazhong University of Science and Technology ist offiziell für den externen Netzwerkzugriff geöffnet
{{o.name}}
{{m.name}}

Ich denke du magst

Origin my.oschina.net/u/4702401/blog/5558194
Empfohlen
Rangfolge