___ tag123kernel ___ Questões relacionadas ao kernel do Linux no Ubuntu. Os problemas podem incluir a atualização e instalação de kernels, compilação, patches e módulos do kernel. ___ qstntxt ___

Esta não é uma questão teórica, pois muitos fizeram isso, embora haja muito pouca informação sobre os processos subjacentes.

Estou desenvolvendo um processador personalizado baseado em MIPS no qual gostaria de executar o Ubuntu. Estou bastante perplexo sobre o que fazer depois de projetar o conjunto de instruções e a própria arquitetura do computador. Eu preciso ser capaz de rodar um kernel e sistema operacional, mas como isso tudo se encaixa? No momento, estou pesquisando sobre como criar um compilador para o kernel do Linux para gerar a linguagem de montagem apropriada. Esse é um bom caminho a percorrer? O que eu preciso fazer depois disso?

    
___ answer221556 ___

Para ter alguma chance de conseguir isso, primeiro você precisa que o GCC seja capaz de produzir o código objeto para sua CPU alvo, o kernel foi escrito usando o GCC e também assumimos que o GCC é usado para construir muito espaço do usuário aplicações também.

Você também precisa escrever as partes específicas da arquitetura no kernel para sua CPU e plataforma. Se você tiver baseado sua CPU em projetos MIPS existentes, isso tornará a vida um pouco mais fácil, por exemplo, o gerenciamento de gerenciamento de memória virtual já pode existir para sua CPU de destino se você tiver sorte, mas pode ser necessário um novo design.

Se você está escrevendo seu próprio compilador, então você precisa fazê-lo suportar todas as extensões específicas do GCC que o kernel suporta, e existem algumas. É muito mais fácil portar o GCC do que escrever o seu próprio a partir do zero.

Portar o kernel é o primeiro passo, mas para uma nova CPU você precisa pensar em como projetará a maneira como o espaço do usuário chama o sistema no kernel e você precisará escrever um hander de chamada do sistema para o kernel e também a chamada de sistema da biblioteca C do espaço do usuário também é ajustada. Você descobrirá que há uma enorme quantidade de esforço necessária apenas para chegar ao ponto em que você é capaz de obter o primeiro processo de inicialização do processo de inicialização do usuário. Você precisará então compilar todas as bibliotecas e utilitários principais apenas para obter uma inicialização básica do sistema. Não é trivial. O primeiro passo é ser capaz de construir ferramentas como o busybox, que fornecem um conjunto mínimo de ferramentas do Linux para conseguir um shell rodando com um conjunto mínimo de ferramentas para interagir com o sistema.

De volta aos tempos do kernel 2.2, eu portei o Linux e o busybox para uma nova arquitetura (um processador de mídia VLIW) como parte de um projeto de pesquisa (que ficou enlatado) e levou cerca de um ano para chegar ao ponto poderia inicializar o kernel, executar o init e iniciar o busybox em um TTY serial. E isso não estava contando o esforço para obter um toolchain estável. Apenas esteja avisado, pode levar algum esforço.

    
___

3

Esta não é uma questão teórica, pois muitos fizeram isso, embora haja muito pouca informação sobre os processos subjacentes.

Estou desenvolvendo um processador personalizado baseado em MIPS no qual gostaria de executar o Ubuntu. Estou bastante perplexo sobre o que fazer depois de projetar o conjunto de instruções e a própria arquitetura do computador. Eu preciso ser capaz de rodar um kernel e sistema operacional, mas como isso tudo se encaixa? No momento, estou pesquisando sobre como criar um compilador para o kernel do Linux para gerar a linguagem de montagem apropriada. Esse é um bom caminho a percorrer? O que eu preciso fazer depois disso?

    
por xupv5 24.11.2012 / 12:06

1 resposta

1

Para ter alguma chance de conseguir isso, primeiro você precisa que o GCC seja capaz de produzir o código objeto para sua CPU alvo, o kernel foi escrito usando o GCC e também assumimos que o GCC é usado para construir muito espaço do usuário aplicações também.

Você também precisa escrever as partes específicas da arquitetura no kernel para sua CPU e plataforma. Se você tiver baseado sua CPU em projetos MIPS existentes, isso tornará a vida um pouco mais fácil, por exemplo, o gerenciamento de gerenciamento de memória virtual já pode existir para sua CPU de destino se você tiver sorte, mas pode ser necessário um novo design.

Se você está escrevendo seu próprio compilador, então você precisa fazê-lo suportar todas as extensões específicas do GCC que o kernel suporta, e existem algumas. É muito mais fácil portar o GCC do que escrever o seu próprio a partir do zero.

Portar o kernel é o primeiro passo, mas para uma nova CPU você precisa pensar em como projetará a maneira como o espaço do usuário chama o sistema no kernel e você precisará escrever um hander de chamada do sistema para o kernel e também a chamada de sistema da biblioteca C do espaço do usuário também é ajustada. Você descobrirá que há uma enorme quantidade de esforço necessária apenas para chegar ao ponto em que você é capaz de obter o primeiro processo de inicialização do processo de inicialização do usuário. Você precisará então compilar todas as bibliotecas e utilitários principais apenas para obter uma inicialização básica do sistema. Não é trivial. O primeiro passo é ser capaz de construir ferramentas como o busybox, que fornecem um conjunto mínimo de ferramentas do Linux para conseguir um shell rodando com um conjunto mínimo de ferramentas para interagir com o sistema.

De volta aos tempos do kernel 2.2, eu portei o Linux e o busybox para uma nova arquitetura (um processador de mídia VLIW) como parte de um projeto de pesquisa (que ficou enlatado) e levou cerca de um ano para chegar ao ponto poderia inicializar o kernel, executar o init e iniciar o busybox em um TTY serial. E isso não estava contando o esforço para obter um toolchain estável. Apenas esteja avisado, pode levar algum esforço.

    
por Colin Ian King 25.11.2012 / 00:51