AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 473260
Accepted
炸鱼薯条德里克
炸鱼薯条德里克
Asked: 2018-10-05 06:20:57 +0800 CST2018-10-05 06:20:57 +0800 CST 2018-10-05 06:20:57 +0800 CST

Todos os argumentos do kernel são realmente usados ​​pelo kernel?

  • 772

Por que o Linux permite 'init=/bin/bash'?

Eu li isso, as respostas estão dizendo que é o KERNEL executando este programa init.

Então comecei a me perguntar, o Linux geralmente vem com um initramfs, que eventualmente será montado e pivot_root no sistema de arquivos raiz real. Então, o que esse initargumento significa? O caminho no initramfs? Ou como eu imaginei, não é lido pelo kernel, mas pelo init do initramfs para executar o init real.

Além disso, o root=UUID=xxxxargumento é que isso é realmente lido pelo kernel ou apenas pelo init do initramfs para encontrar o sistema de arquivos raiz real?

Parece que posso passar qualquer argumento que quiser como argumentos do kernel, então todos eles são lidos pelo kernel ou pelo menos alguns deles são significativos apenas para programas de espaço do usuário?

linux-kernel
  • 2 2 respostas
  • 2116 Views

2 respostas

  • Voted
  1. Best Answer
    Stephen Kitt
    2018-10-05T06:40:15+08:002018-10-05T06:40:15+08:00

    Os parâmetros passados ​​na linha de comando do kernel não precisam ser significativos para o kernel: a documentação dos parâmetros do kernel diz

    O kernel analisa os parâmetros da linha de comando do kernel até “--”; se ele não reconhece um parâmetro e não contém um '.', o parâmetro é passado para o init: parâmetros com '=' vão para o ambiente do init, outros são passados ​​como argumentos de linha de comando para o init. Tudo depois de “--” é passado como um argumento para init.

    Isso não se aplica a inite rootque realmente são parâmetros do kernel e são tratados pelo kernel. Eles também podem ser atuados pelo espaço do usuário, uma vez que aparecem em arquivos /proc/cmdline. (Assim, por exemplo, o systemd leva quietem consideração o parâmetro do kernel para reduzir sua saída.)

    Quando o kernel é inicializado com um initramfs, o rootparâmetro não é usado diretamente pelo kernel e o initparâmetro só é usado se rdinitfalhar. initinicialização é tratada em kernel_init, que funciona da seguinte forma:

    • se houver um “comando de execução do ramdisk” (ou o valor dado rdinitna linha de comando do kernel, ou /init) que é acessível, o kernel tenta executá-lo;
    • se isso falhar, e houver um “comando de execução” (o valor fornecido initna linha de comando do kernel), o kernel tentará executá-lo e entrará em pânico se não puder;
    • como último recurso, o kernel tenta executar /sbin/init, /etc/init, /bin/inite /bin/sh; se nenhum deles puder ser executado, ele entrará em pânico .

    Quando há um initramfs, tudo isso acontece lá, e o volume de destino não é montado pelo kernel. O que acontece depois que o kernel executa o primeiro initprograma (normalmente, o /initscript no initramfs) depende do programa, não do kernel. Os argumentos que não são passados init​​ainda estão disponíveis /proc/cmdlinese o /procsistema de arquivos estiver montado.

    • 20
  2. thrig
    2018-10-05T07:01:07+08:002018-10-05T07:01:07+08:00

    Passar argumentos de kernel personalizados é uma maneira de personalizar um sistema durante uma instalação do KickStart, por exemplo, um servidor PXE pode definir:

    linuxefi /c7/vmlinuz ks=http://.../ks/c7 lab ksdevice=eth0 net.ifnames=0 biosdevname=0
    

    where labé então usado na configuração do KickStart para fazer coisas diferentes das outras compilações do sistema:

    %pre
    ...
    case " $(cat /proc/cmdline)" in
       ...
       *\ lab*)
          filesystems_lab
          ;;
       *)
          filesystems_common
          ;;
    ...
    

    Aqui para configurar um layout de sistema de arquivos diferente do usado em outros tipos de sistema. Esperamos que rótulos diferentes sejam usados ​​para personalizações locais do que são usados ​​pelo kernel, dado o único namespace envolvido.

    • 3

relate perguntas

  • Como posso fazer meu console framebuffer funcionar?

  • Bloqueando montagem syscall

  • Por que a versão 30 das ferramentas sem fio se tornou uma versão beta permanente?

  • tamanho da pilha do programa

  • Quais dongles WiFi 802.11ac (ou posteriores) funcionam com o kernel Linux 4.13

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    ssh Não é possível negociar: "nenhuma cifra correspondente encontrada", está rejeitando o cbc

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    Como descarregar o módulo do kernel 'nvidia-drm'?

    • 13 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add retorna com: "Erro ao conectar ao agente: nenhum arquivo ou diretório" 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve