¿Cómo obtengo el código fuente del núcleo?

25

Estoy planeando escribir algunos controladores de dispositivo y necesito obtener la fuente del kernel de Linux. Mi versión de kernel de Linux es 3.2.0-23-generic-pae y descargué la imagen de esto . En muchos de los artículos que he leído, me dice que necesito tener todo el árbol del kernel para comenzar a insertar nuevos módulos.

¿Es suficiente si descargo esta imagen y la pego en la usr/src/carpeta o tengo que hacer otra cosa?

Sab
fuente
1
Por lo general, solo instalo el paquete 'linux-source' desde synaptic cuando estoy compilando de forma personalizada para una de mis máquinas, pero dado que estás haciendo el desarrollo, es posible que necesites la versión más reciente. Este enlace podría serle útil: help.ubuntu.com/community/Kernel/Compile
Mark Paskal

Respuestas:

27

Esto obtendrá la fuente del núcleo de valores:

apt-get source linux-source

Puede verificar qué versión del núcleo se ejecuta de esta manera:

uname -r

Lo cual imprimirá algo como:

3.13.0-46-generic

Puede encontrar una lista de las versiones actuales del paquete fuente disponibles en su sistema a través de:

apt-cache search linux-source

Para obtener la versión anterior del kernel:

git clone git://kernel.ubuntu.com/ubuntu/ubuntu-trusty.git

En el enlace de arriba, 'confiable' es el nombre en clave para la versión de Ubuntu. Puede encontrar el nombre en clave de la versión de Ubuntu que ha instalado a través de:

cat /etc/lsb-release
Bryce
fuente
Si uso git para clonar, ¿cómo especifico la versión? Además, si clono, es suficiente si copio pate en la carpeta usr / src
Sab
Ese repositorio de git se mantiene específicamente en 3.2.0; sigue lo que hay en Ubuntu Precise (12.04). Si desea una versión diferente, cambie ubuntu-precise.git a ubuntu-quantal.git o lo que sea. Debería estar bien copiar en usr / src.
Bryce
De acuerdo. Gracias. ¿Pero cómo encontraste ese enlace git?
Sab
Y dónde debería poder encontrar el árbol de origen cuando instalo con ... Maldición, debería leer mejor. La respuesta dice que apt-get sourceno apt-get install. Que el árbol de origen terminará en su ruta actual .
Pro Backup
8
apt-get source linux

Es la forma más fácil. Descargará la fuente de su repositorio, y será la misma que la versión que está ejecutando (suponiendo que aún no la haya personalizado).

Pero si desea encontrar dónde se mantiene la fuente, puede ejecutar:

apt-cache showsrc linux

Busque el atributo 'Vcs-' (Sistema de control de versiones). Por lo general, será un repositorio git (Vcs-Git) o ​​mercurial.

Nota: estos comandos funcionan con cualquier paquete. Simplemente sustituya 'linux' con el paquete que le interesa. Y también tenga en cuenta que 'apt-get source' no necesita acceso a sudo y volcará la fuente en su directorio actual.

Brendan McGrath
fuente
Esto requiere que la máquina que está descargando coincida con la máquina de destino. Realmente solo funciona si tienes una red. La mayoría de los lectores que llegan a esta página no tendrán una red (de ahí que de repente necesiten la fuente). Lo necesito como tarball en una memoria USB y no tengo un apt que funcione.
mckenzm
Esto solo descargó los encabezados de Linux en /usr/src- no la fuente completa del núcleo - en Ubuntu 16.04
Pierz el
4

Descargar fuente directamente desde Launchpad

Por extraño que parezca, todo el mundo recomienda apt-get source lo que no funciona la mayor parte del tiempo si está buscando una versión de kernel específica:

Supongamos que necesita la fuente del núcleo para 3.19.0-58:
apt-get source linux-image-3.19.0-58-genericobtendrá la fuente del último núcleo de la serie: 3.19.0-80 en este caso, que no es lo que solicitó.

Así que tienes dos opciones:

1) Renunciar, instalar el kernel 3.19.0-80 y usar apt-get source

2) Obtenga la fuente directamente desde la plataforma de lanzamiento:

campo de golf

  • Póngalos en un nuevo directorio, descomprímalos con dpkg-source -x *.dsc

Notas:

  • Tiene que haber una mejor manera.
  • Puedes obtener la versión que deseas de git, pero te espera una gran descarga. Consulte "Obtención de las fuentes del kernel para una versión de Ubuntu usando git" en Ubuntu Wiki Kernel Source Code .
exprimir
fuente
Gracias por explicar esto tan claramente. Sin embargo, todavía no puedo encontrar la fuente de linux-image-4.15.0-39-generic. Este proceso es innecesariamente complicado. He intentado buscarlo en Google, pero sigo buscando paquetes que solo son de unos pocos kilobytes. ¿Algun consejo?
olvida el
3

Solo elige uno de:

sudo apt install linux-source  # downloads into system directory
sudo apt source linux-source  # downloads into working directory

Si le dicen que proporcione algunas URL de 'fuentes' en su sources.list, vaya a editar su /etc/apt/sources.listarchivo y elimine el comentario de la deb-srclínea deseada , por ejemplo (si está ejecutando Xenial):

deb http://fr.archive.ubuntu.com/ubuntu/ xenial main restricted
# deb-src http://fr.archive.ubuntu.com/ubuntu/ xenial main restricted

La eliminación #de esta última línea habilita los repositorios de fuentes para descargar, incluidas las fuentes del núcleo.

Observaciones:

  • Utiliza herramientas modernas; evitar apt-get.
  • Estos comandos descargan el código fuente de su núcleo actual (en mi caso, 4.4.0-75-genericpor ejemplo).
  • Cuando se descargan en el directorio del sistema, los archivos se almacenan en /usr/src/linux-source-4.4.0/(por ejemplo).
Tim
fuente
No funciona para mí (pero tampoco la versión apt-get). Estoy ejecutando Ubuntu 16.04.4, kernel 4.4.0-98-generic. Dice: "Debe poner algunos URI 'fuente' en su sources.list". No tengo idea de cómo hacer eso.
Andrew Bainbridge el
@ AndrewBainbridge Agregué información sobre eso. ¿Está bien para ti ahora?
Tim
Si gracias. Fue un comentario estúpido de mi parte. Solo necesitaba googlear el mensaje de error. De todos modos, tenga un voto positivo por su esfuerzo.
Andrew Bainbridge el