Inhaltsverzeichnis
Das Hinzufügen zum Kernel sollte in jedem Treiber-Transplantationsbuch zu finden sein Folgendes. Informationen, ich werde es hier nicht zu sehr beschreibenrrreeDa unser MTD-Treiber fertig ist, wird die Sondenschnittstellenfunktion im Treiber aufgerufen add_mtd_partitions(s3c_mtd, setzt in der Probe-Funktion ->partitions, sets->nr_partitions);Partitionstabellen hinzufügen.
2.u-boot传参
3.dts传参

Was ist Linux MTD?

May 11, 2022 pm 05:22 PM
linux

Unter Linux bezieht sich mtd auf „Speichertechnologiegerät“ und ist ein Subsystem im Speichergerät. Das MTD-System wurde in Linux eingeführt, um eine einheitliche Schnittstelle für NOR FLASH- und NAND FLASH-Geräte bereitzustellen. MTD-Geräte können normalerweise in vier Schichten unterteilt werden: Geräteknoten, MTD-Geräteschicht, MTD-Originalgeräteschicht und Hardwaretreiberschicht.

Was ist Linux MTD?

Die Betriebsumgebung dieses Tutorials: Linux5.9.8-System, Dell G3-Computer.

Was ist Linux MTD?

MTD steht für „Memory Technology Device“, was „Speichertechnologiegerät“ bedeutet und ein Subsystem von Linux-Speichergeräten ist.

Im Linux-Kernel wird die MTD-Schicht eingeführt, um eine einheitliche Schnittstelle für NOR FLASH- und NAND FLASH-Geräte bereitzustellen. MTD isoliert das Dateisystem vom zugrunde liegenden FLASH-Speicher.

Der Zweck des Entwurfs dieses MTD-Systems besteht darin, eine Abstraktionsschicht und eine Schnittstelle für Speichergeräte bereitzustellen, sodass Hardwaretreiber-Designer nur die einfachste Lese-/Schreib-/Löschfunktion für zugrunde liegende Hardwaregeräte bereitstellen müssen Sie müssen sich nicht darum kümmern, wie die Daten den Benutzern der oberen Schicht dargestellt werden, da das MTD-Speichergeräte-Subsystem dies für Sie erledigt.

MTD-Framework

Das MTD-Gerät von Linux befindet sich unter drivers/mtd/.

Der Inhalt unter der MTD-Datei lautet wie folgt:

Was ist Linux MTD?

MTD-Geräte können normalerweise in vier Schichten unterteilt werden

Von oben nach unten: Geräteknoten, MTD-Geräteschicht, MTD-Originalgeräteschicht und Hardwaretreiberschicht.

Was ist Linux MTD?

1.cmdlinepart.c

Wenn die MTD-Partitionstabelle von U-Boot über den CMD-Parameter an Linux übertragen wird, muss der Linux-Kernel mtdparts nicht registrieren und hinzufügen, sondern nur festlegen Befehlszeilenpartitionsoption in MTD. Schalten Sie sie einfach ein. Um diese Methode verwenden zu können, muss U-Boot MTD unterstützen und die übertragenen MTD-Partitionsparameter müssen den Formatanforderungen entsprechen.

2.Geräteordner

Wenn wir ein SPI-Flash-Gerät haben und mtd zur Verwaltung verwenden möchten, legen wir es normalerweise im Geräteordner ab, z. B. m25p80.c im Geräteordner ist ein typisches Beispiel für SPI-Flash Gerät.

3.chips/nand/onenand-Ordner

nand-Flash-Treiber befindet sich im NAND-Ordner;

onenand-Flash-Treiber befindet sich im Onenand-Ordner;

Nor-Flash-Treiber ist ziemlich kompliziert und befindet sich im Folgenden Dateien:

Chips: CFI/JEDEC-Schnittstellen-Universaltreiber

Geräte: noch Flash-unterliegender Treiber (SPI-Flash)

Karten: noch Flash-Mapping-Beziehungsbezogene Funktionen

4. Kerndatei

mtdchar.c: MTD-Zeichen Geräteschnittstelle Relevante Implementierung, Gerätenummer 31;

mtdblock.c: MTD-Blockgeräteschnittstellenbezogene Implementierung, Gerätenummer 90; Durchführung.

5.ubi

Die Unterstützungsschicht von ubifs-Dateien muss unter Gerätetreiber -> UBI-Unsortiertes Blockbild aktiviert werden. Wählen Sie UBIFS-Dateisystemunterstützung unter Dateisysteme -> Verschiedene Dateisysteme.

Implementierung der MTD-Partitionstabelle

Während des Startvorgangs können Sie in der Konsole häufig Informationen wie die folgenden sehen:

0x000000000000-0x000000100000 : "Bootloade"
0x000000100000-0x000002000000 : "Kernel"
0x000002000000-0x000003000000 : "User"
0x000003000000-0x000008000000 : "File System"
Nach dem Login kopieren

Dies ist die intuitivste Darstellungsform, die uns MTD bietet Die verschiedenen Partitionen im Speicher sind die Partitionsstruktur des Moduls, aber wie werden diese Partitionen implementiert? Es gibt mehrere Möglichkeiten, die Partitionstabelle zu implementieren, die im Folgenden erläutert werden:

Hinweis: Voraussetzung für die Implementierung der Partitionstabelle ist, dass der MTD-Gerätetreiber erfolgreich war, andernfalls gibt es auch dann keine Partition, über die man sprechen könnte Der Treiber ist nicht erfolgreich.

1. Hinzufügen zum Kernel

Das Hinzufügen zum Kernel sollte in jedem Treiber-Transplantationsbuch zu finden sein Folgendes. Informationen, ich werde es hier nicht zu sehr beschreibenrrreeDa unser MTD-Treiber fertig ist, wird die Sondenschnittstellenfunktion im Treiber aufgerufen add_mtd_partitions(s3c_mtd, setzt in der Probe-Funktion ->partitions, sets->nr_partitions);Partitionstabellen hinzufügen.

2. U-Boot-Parameterübertragung

add_mtd_partitions(s3c_mtd, sets->partitions, sets->nr_partitions);实现分区表的添加。

2.u-boot传参

在u-boot下可以通过添加mtdparts信息到bootargs中,u-boot启动后会将bootargs中的信息传送给kernel,,kernel在启动的时候会解析bootargs中mtdparts的部分,这边举个例子:

mtdparts=nand.0:1M(Bootloader)ro,31M(Kernel)ro,16M(User),96M(File System)

Unter U-Boot können Sie mtdparts-Informationen zu Bootargs hinzufügen. Nach dem Start von U-Boot werden die Informationen in Bootargs an den Kernel übertragen und der Kernel analysiert sie es beginnt. Der mtdparts-Teil von bootargs, hier ist ein Beispiel:

mtdparts=nand.0:1M(Bootloader)ro,31M(Kernel)ro,16M(User),96M(File System)</code >, Weitere Informationen zum spezifischeren mtdparts-Format finden Sie in den entsprechenden Informationen. 🎜🎜Damit der Kernel mtdparts-Informationen analysieren kann, müssen wir die Option „Gerätetreiber –> Memory Technology Device (MTD)-Unterstützung –>Befehlszeilen-Partitionstabellen-Analyseoption im Kernel aktivieren, wie oben erwähnt. 🎜<p>在内核中添加分区表的时候,我们是在平台设备里面加入mtd_partition信息。这边通过u-boot传参则取消平台设备里面的partition信息,那我们需要怎样解析u-boot的传过来的mtdparts呢。</p><p>u-boot传参过来后,cmdlinepart.c中会将这些参数解析好,存在里面<code>LIST_HEAD(part_parsers)链表里面,然后我们在驱动的probe函数中,通过调用mtd_device_parse_register(mtd, probe_types,&ppdata, NULL, 0);函数。

mtd_device_parse_register()函数位于drivers/mtd/mtdcore.c 中,内容如下:

int mtd_device_parse_register(struct mtd_info *mtd, const char * const *types,
                  struct mtd_part_parser_data *parser_data,
                  const struct mtd_partition *parts,
                  int nr_parts)
{
    int err;
    struct mtd_partition *real_parts;

    err = parse_mtd_partitions(mtd, types, &real_parts, parser_data);
    if (err <= 0 && nr_parts && parts) {
        real_parts = kmemdup(parts, sizeof(*parts) * nr_parts,
                     GFP_KERNEL);
        if (!real_parts)
            err = -ENOMEM;
        else
            err = nr_parts;
    }

    if (err > 0) {
        err = add_mtd_partitions(mtd, real_parts, err);
        kfree(real_parts);
    } else if (err == 0) {
        err = add_mtd_device(mtd);
        if (err == 1)
            err = -ENODEV;
    }

    return err;
}
Nach dem Login kopieren

可以看到该函数会先执行parse_mtd_partitions(mtd, types, &real_parts, parser_data);函数,后面还是通过add_mtd_partitions()函数来实现分区表的添加。

parse_mtd_partitions()函数位于drivers/mtd/mtdpart.c中,内容如下:

int parse_mtd_partitions(struct mtd_info *master, const char *const *types,
             struct mtd_partition **pparts,
             struct mtd_part_parser_data *data)
{
    struct mtd_part_parser *parser;
    int ret = 0;

    if (!types)
        types = default_mtd_part_types;

    for ( ; ret <= 0 && *types; types++) {
        parser = get_partition_parser(*types);
        if (!parser && !request_module("%s", *types))
            parser = get_partition_parser(*types);
        if (!parser)
            continue;
        ret = (*parser->parse_fn)(master, pparts, data);
        put_partition_parser(parser);
        if (ret > 0) {
            printk(KERN_NOTICE "%d %s partitions found on MTD device %s\n",
                   ret, parser->name, master->name);
            break;
        }
    }
    return ret;
}
Nach dem Login kopieren

进入parse_mtd_partitions()函数会先判断types的类型,如果为空则给默认值,types的类型一般就两种,如下:

static const char * const default_mtd_part_types[] = {
    "cmdlinepart",
    "ofpart",
    NULL
};
Nach dem Login kopieren

第一个"cmdlinepart"即u-boot传参的方式,第二个"ofpart"即下面要讲到的使用dts传参的方式,判断完类型后,就通过get_partition_parser去解析part_parsers链表里面的数据,这样就完成u-boot参数的解析。

3.dts传参

在Linux3.14以后的linux版本中,加入一个新的知识DTS(Device tree),dts其实就是为了解决ARM Linux中的冗余代码,在Linux2.6版本的arch/arm/plat.xxx和arch/arm/mach.xxx中充斥着大量的垃圾代码,采用Device Tree后,许多硬件的细节可以直接透过它传递给Linux,而不再需要在kernel中进行大量的冗余编码,关于dts可以自行查阅资料。

dts传参的原理其实和u-boot一样,区别在于:u-boot的时候是通过cmdlinepart.c文件实现分区信息写入LIST_HEAD(part_parsers)链表,dts则是用过ofpart.c文件实现分区信息写入LIST_HEAD(part_parsers)链表,所以同样要把ofpart.c文件的宏打开,在调用mtd_device_parse_register(mtd, probe_types,&ppdata, NULL, 0);函数的时候types要设置成ofpart。

如果去对比Linux2.6版本和Linux3.14版本,会发现drivers/mtd/ofpart.c和drivers/mtd/mtdpart.c文件有所不同,Linux3.8版本里面多了Device tree这一部分的内容,感兴趣的可以自己深究下。

这边举个dts的例子:

 pinctrl-0 = <&s3c_nand_flash>;
    ranges = <0 0 0x000000000000 0x000008000000>;   /* CS0: NAND */
    nand@0,0 {
        partition@1 {
            label = "Bootloader";
            reg = <0x000000000000 0x000000100000>;
        };
        partition@2 {
            label = "Kernel";
            reg = <0x000000100000 0x000002000000>;
        };
        partition@3 {
            label = "User";
            reg = <0x000002000000 0x000003000000>;
        };
        partition@4 {
            label = "File System";
            reg = <0x000003000000 0x000008000000>;
        };
    };
Nach dem Login kopieren

Linux mtd system的分析就到这边,有感悟时会持续会更新。

相关推荐:《Linux视频教程

Das obige ist der detaillierte Inhalt vonWas ist Linux MTD?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Deepseek Web Version Eingang Deepseek Offizielle Website Eingang Deepseek Web Version Eingang Deepseek Offizielle Website Eingang Feb 19, 2025 pm 04:54 PM

Deepseek ist ein leistungsstarkes Intelligent -Such- und Analyse -Tool, das zwei Zugriffsmethoden bietet: Webversion und offizielle Website. Die Webversion ist bequem und effizient und kann ohne Installation verwendet werden. Unabhängig davon, ob Einzelpersonen oder Unternehmensnutzer, können sie massive Daten über Deepseek problemlos erhalten und analysieren, um die Arbeitseffizienz zu verbessern, die Entscheidungsfindung zu unterstützen und Innovationen zu fördern.

So installieren Sie Deepseek So installieren Sie Deepseek Feb 19, 2025 pm 05:48 PM

Es gibt viele Möglichkeiten, Deepseek zu installieren, einschließlich: kompilieren Sie von Quelle (für erfahrene Entwickler) mit vorberechtigten Paketen (für Windows -Benutzer) mit Docker -Containern (für bequem am besten, um die Kompatibilität nicht zu sorgen), unabhängig von der Methode, die Sie auswählen, bitte lesen Die offiziellen Dokumente vorbereiten sie sorgfältig und bereiten sie voll und ganz vor, um unnötige Schwierigkeiten zu vermeiden.

Wie löste ich das Problem der Berechtigungen beim Betrachten der Python -Version in Linux Terminal? Wie löste ich das Problem der Berechtigungen beim Betrachten der Python -Version in Linux Terminal? Apr 01, 2025 pm 05:09 PM

Lösung für Erlaubnisprobleme beim Betrachten der Python -Version in Linux Terminal Wenn Sie versuchen, die Python -Version in Linux Terminal anzuzeigen, geben Sie Python ein ...

Bitget Offizielle Website -Installation (2025 Anfängerhandbuch) Bitget Offizielle Website -Installation (2025 Anfängerhandbuch) Feb 21, 2025 pm 08:42 PM

Bitget ist eine Kryptowährungsbörse, die eine Vielzahl von Handelsdienstleistungen anbietet, darunter Spot -Handel, Vertragshandel und Derivate. Der 2018 gegründete Austausch hat seinen Hauptsitz in Singapur und verpflichtet sich, den Benutzern eine sichere und zuverlässige Handelsplattform zu bieten. Bitget bietet eine Vielzahl von Handelspaaren, einschließlich BTC/USDT, ETH/USDT und XRP/USDT. Darüber hinaus hat der Austausch einen Ruf für Sicherheit und Liquidität und bietet eine Vielzahl von Funktionen wie Premium -Bestellarten, gehebelter Handel und Kundenunterstützung rund um die Uhr.

Holen Sie sich das Installationspaket Gate.io kostenlos Holen Sie sich das Installationspaket Gate.io kostenlos Feb 21, 2025 pm 08:21 PM

Gate.io ist ein beliebter Kryptowährungsaustausch, den Benutzer verwenden können, indem sie sein Installationspaket herunterladen und auf ihren Geräten installieren. Die Schritte zum Abholen des Installationspakets sind wie folgt: Besuchen Sie die offizielle Website von Gate.io, klicken Sie auf "Download", wählen Sie das entsprechende Betriebssystem (Windows, Mac oder Linux) und laden Sie das Installationspaket auf Ihren Computer herunter. Es wird empfohlen, die Antiviren -Software oder -Firewall während der Installation vorübergehend zu deaktivieren, um eine reibungslose Installation zu gewährleisten. Nach Abschluss muss der Benutzer ein Gate.io -Konto erstellen, um es zu verwenden.

Ouyi OKX Installationspaket ist direkt enthalten Ouyi OKX Installationspaket ist direkt enthalten Feb 21, 2025 pm 08:00 PM

Ouyi Okx, die weltweit führende digitale Asset Exchange, hat jetzt ein offizielles Installationspaket gestartet, um ein sicheres und bequemes Handelserlebnis zu bieten. Auf das OKX -Installationspaket von Ouyi muss nicht über einen Browser zugegriffen werden. Der Installationsprozess ist einfach und einfach zu verstehen.

Wie setze ich nach dem Neustart des Systems automatisch Berechtigungen von Unixsocket fest? Wie setze ich nach dem Neustart des Systems automatisch Berechtigungen von Unixsocket fest? Mar 31, 2025 pm 11:54 PM

So setzen Sie die Berechtigungen von Unixsocket automatisch nach dem Neustart des Systems. Jedes Mal, wenn das System neu startet, müssen wir den folgenden Befehl ausführen, um die Berechtigungen von Unixsocket: sudo ...

Ouyi Exchange Download Official Portal Ouyi Exchange Download Official Portal Feb 21, 2025 pm 07:51 PM

Ouyi, auch bekannt als OKX, ist eine weltweit führende Kryptowährungsplattform. Der Artikel enthält ein Download -Portal für das offizielle Installationspaket von Ouyi, mit dem Benutzer den Ouyi -Client auf verschiedenen Geräten installiert werden können. Dieses Installationspaket unterstützt Windows, Mac, Android und iOS -Systeme. Nach Abschluss der Installation können sich Benutzer registrieren oder sich beim Ouyi -Konto anmelden, Kryptowährungen mit dem Handel mit den von der Plattform erbrachten Diensten anmelden.

See all articles