Ir ao conteúdo

Adicionando método ao servidor VFS no Minix

Boa Noite,

Primeiramente, o que é VFS? VFS é Virtual File System. É uma camada que existe em muitos sistemas operacionais e também no Minix, que cuida da parte comunicação com o File System. O mesmo foi desenvolvido pelo Balázs Gerófi como tese de Mestrado na universidade de Amsterdam com nome de “Design and implementation of the MINIX Virtual File system“.

Mas por que se comunicar com o servidor VFS? Por que adicionar algo nele? Bom, se você está trabalhando em baixo nível e quer por exemplo acessar diretamente os INODES por algum motivo, você deve inicialmente se comunicar com o servidor VFS. Para realizar a comunicação é simples, mas vamos supor que você queira um método especifico que o mesmo não possue, então você deve cria-lo.

Como fazer isso?

Inicialmente você deve editar o “/usr/src/include/minix/callnr.h”. Adicione logo abaixo a linha “#define GETPGRP 63″ o seguinte:
[code lang=”c”]
#define TESTCALL 64
[/code]

Em seguida você deve modificar o servidor VFS e adicionar o que você quer que faça quando a mesma for chamada. Edite inicialmente o “/usr/src/servers/vfs/table.c”. Você deve pegar a linha que possui no_sys, /* 64 = unused */
E alterar para:
[code lang=”c”]
do_TESTCALL, /* 64 = unused */
[/code]

Este será o método chamado quando a syscall de número 64 for executada.

Após isso você deve alterar o “/usr/src/servers/vfs/proto.h” que é onde estão definidos os métodos. Adicione o seguinte:
[code lang=”c”]
/* do_TESTCALL EXAMPLE */
_PROTOTYPE( int do_TESTCALL, (void) );
[/code]

Então você deve criar o método propriamente dito dentro do “/usr/src/servers/vfs/read.c” (ao menos eu fiz nesse arquivo). Adicione o seguinte código:

[code lang=”c”]
/*===========================================================================*
*Trabalho: do_ver_contig *
*===========================================================================*/
PUBLIC int do_TESTCALL() {
message m;
printf(“Número recebido %d”, m_in.fd);
}
[/code]

Mas como executar? E ver isso tudo funcionando? Como compilar?
Inicialmente acesse “/usr/src/tools/” e execute:

$ make libraries

(Este pode ser um processo demorado)

Continue em “/usr/src/tools” e execute:

$ make hdboot

Reinicie.

Como testar e ver se está funcionando? Crie um arquivo no seu “/root” com o seguinte conteúdo:
[code lang=”c”]
#include
#include
#include #include

int main(int argc, char *argv[]) {
int fd = 2;
message m;
m.m1_i1 = fd;
printf(“Number: %d”, fd);
_syscall(FS, 64, &m);
}
[/code]

O que isso é pra fazer? Fazer uma syscall no método 64, passar por mensagem o número 2, então o do_TESTCALL recebe o parametro e imprime o mesmo. Bem inutil, mas isto é pra demonstrar como criar métodos dentro do servidor VFS.

Exemplo dos códigos adicionados no servidor VFS

Criando uma biblioteca do sistema no Minix.

Atenciosamente,
Matheus

PS: É um exemplo bobo, mas é para demonstrar como adicionar métodos ao servidor VFS. Provavelmente nos próximos dias publicarei um exemplo, mais real.

Publicado emCLinux

1.671 Comentários

  1. $20 no deposit bonus new zealand, best casinos in south
    united states and do you pay tax on real casino playing cards [Aundrea] winnings in australia, or new zealandn free chip casino

  2. free casino cash no deposit usa, best $10 deposit
    bonus new zealand and casino free spins no deposit required united kingdom, or best online how casinos cheat
    at craps – Annie, australia
    2021

  3. netent casino list usa, where can united statesns play roulette
    online and $5 deposit online casino canada, or dollar 5 deposit online casino united kingdom

    Look at my homepage :: baccarat win pro (Janell)

  4. free spins shark freuky, difference between european roulette and
    united kingdom and no deposit cash bonus casino canada, or are there can 18 year olds go to casinos in vegas [Travis] in usa

  5. best online usa casinos, united states day free spins and united kingdom casino club, or no deposit roulette bonus usa

    Also visit my web-site – what hands can you double down on in blackjack (Jaunita)

  6. playf_veea playf_veea

    Bin inzwischen seit ungefaehr einem halben Jahr bei Play Fortuna angemeldet, also kann ich inzwischen aus eigener Erfahrung berichten. Habe es beim Vergleich von Anbietern gefunden, hauptsaechlich wegen der Spielauswahl.

    Der Spielkatalog auf der Plattform ist wirklich umfangreich: Pragmatic Play, NetEnt, Play’n GO liefern die Titel. Die bekannten Hits stehen ganz oben, die High-Volatility-Spiele machen mir am meisten Spass. Evolution betreibt die Live-Tische: Crazy Time, Lightning Roulette und die Game Shows. Deutschsprachige Dealer gibt es in der Hauptzeit.

    Das Startpaket hier bietet eine Verdopplung bis 500 Euro, und Gratisdrehungen in Tagesraten. Der Rollover betraegt 40-fach, im oberen Bereich aber machbar. Gueltige Bonusbedingungen stehen bei play fortuna vor der Einzahlung pruefen. Reload-Boni gibt es woechentlich.

    Mindesteinzahlung sind 10 Euro. Karten und E-Wallets funktionieren, Krypto ist auch moeglich. Skrill-Auszahlungen waren am naechsten Tag da, Auf die Karte waren es drei Werktage. Verifizierung lief glatt — Ausweis und Adressnachweis, fertig am selben Tag.

    Mobil spiele ich ueber den Browser, die Seite laedt schnell. Support antwortet auf Deutsch im Chat und reagiert innerhalb weniger Minuten. Reguliert wird ueber Curacao, das sollte man bedenken. Mein Geld kam bisher immer an.

  7. poker sites australia, is fort mcdowell casino open yet – Danielle – winnings
    tax free in canada and free imatant spins no deposit bonus united states, or real
    online australian pokies

  8. the best online casino for usa, 2021 no deposit bonus codes nz and gambling in the
    uk statistics, or online casino with 22bet free
    spins (Darren) signup bonus real money usa

  9. real money poker sites canada, how many poker machines do you have
    to be 21 to go to a casino in vegas (Terrell) australia and td australia visa debit gambling,
    or usa online casinos gambling

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *