Gustavo Sied > Sin categoría > Linux From Scratch para Cubietruck – C9: kernel Linux construir recetas
Linux From Scratch para Cubietruck – C9: kernel Linux construir recetas
Gustavo
5 febrero, 2014
Desde leemos utilizar repetidamente Linux kernel build líneas de comandos a partir de ahora, y es realmente una experiencia desconcertante no recordar la sintaxis de línea de comandos de compilación exacta, vamos a ponerlo aquí abajo para que podamos copiar y pegar como lo haremos.
0. limpiar / desinfectar src linux />
directorio No vamos a construir en dir fuente original, pero en un directorio dedicado para la construcción. Tenemos que garantizar la dir fuente original es limpio.
hacer mrproper
hacer distclean
1. cruz
construir
ARCH = brazo
CROSS_COMPILE = x86_64-luke-linux-gnu-
de exportación ARCH CROSS_COMPILE
2. Fuera de árbol de fuentes />
edificio prefiero construir el kernel en un directorio dedicado para la construcción. El primer paso será generar config en el directorio build:.
$ make -C .. / ../../src/linux-3.12.2 / O = $ (pwd) menuconfig
Después de eso, un. config y un Makefile se genera en construir dir. Ahora usted puede hacer todo el maquillaje en el comando de generación después.
3. hacer ayuda
«make help» listará todos hacen diana / options, es la ayuda más útil.
4. consejos para generar / Personalizar. config
Todas las opciones de configuración tienen un valor por defecto en el sistema kconfig. Si quieres echar un vistazo a todos los valores por defecto, que puede hacer:
hacer alldefconfig
La generada config tendrá todos los valores predeterminados
Si comete algún ajuste de configuración personalizada y guardarlo en config, y.. está satisfecho con los valores de configuración actuales, puede guardar su delta en comparación con todos los valores predeterminados del kernel a un archivo independiente «defconfig»:
hacer savedefconfig
A» defconfig «se generará en directorio actual. Sólo se registra las diferentes opciones que comparan al archivo «alldefconfig». Por ejemplo:
gcc @ luke-debian: ~ / build / host / t $ crea alldefconfig
GEN ; / home / gcc / build / host / t / Makefile
scripts / kconfig / conf – alldefconfig kconfig
#
# de configuración escrito a config
#
gcc @ luke-debian: ~ / build / host / t $ ls-la
total de 68
drwxr-xr-x 4 gcc 4096 23 de enero 15:43.
drwxr xr-x-10 usuarios gcc 4096 23 de enero 15:25 ..
-r rw– r- – 1 usuarios gcc 23769 23 de enero 15:43 config
-rw-r – – r usuarios 1 gcc 23769 23 de enero 15:43 config.old
drwxr-xr-x 4 usuarios gcc 4096 23 de enero 15:43 incluir
-rw-r – r – 1 usuarios gcc 624 23 de enero 15:43 Makefile
usuarios drwxr-xr-x 4 gcc 4096 23 de enero 15:43 guiones
lrwxrwxrwx 1 usuarios gcc 26 de enero 23 15:43 fuente -> / home/gcc/src/linux-3.12.2
gcc @ luke-debian: ~ / build / host / t $ hacer savedefconfig
GEN / home / gcc / build / host / t / Makefile
scripts / kconfig / conf – savedefconfig = defconfig kconfig
gcc @ luke-debian: ~ / build / host / t $ ls-la
total de 68
drwxr-xr-x de 4 usuarios gcc 4096 23 de enero 15:44
drwxr-xr-x 10 usuarios gcc 4096 23 de enero 15:25 ..
-rw-r – r – 1 gcc usuarios 23769 23 de enero 15:43 config
-rw-r – r – 1 usuarios gcc 23769 23 de enero 15:43. config.old
-rw-r – r – 1 gcc usuarios 0 23 de enero 15:44 defconfig
drwxr-xr-x 4 usuarios gcc 4096 23 de enero 15:43 incluya
-rw-r – 1 usuarios gcc 624 23 de enero 15:44 Makefile
drwxr-xr-x 4 usuarios gcc 4096 23 de enero 15:43 guiones />
usuarios lrwxrwxrwx 1 gcc 26 de enero 23 15:44 fuente -> / home/gcc/src/linux-3.12.2
Generamos un. config con todos los valores de configuración del kernel por defecto. Entonces se genera un «defconfig» a través de «hacer savedefconfig». Desde nuestra actual «. Config» es el mismo que el «todos los valores de configuración del núcleo por defecto», por lo que el delta entre ellos es NINGUNO. Así que el «defconfig» generada está vacía
gcc @ luke-debian: ~ / build / host / t $ hacer vexpress_defconfig
GEN / home / gcc / build / host / t / Makefile
#
# Configuración escrito a config
#
Courier New, Courier, monospace; font-size: x-small;»> total de 124
Courier New, Courier, monospace; font-size: x-small;»> drwxr-xr-x 10 usuarios gcc 4096 23 de enero 15:25 ..
-rw-r – r – 1 usuarios gcc 50979 23 de enero 15:48 config.old
drwxr-xr-x 5 usuarios gcc 4096 23 de enero 15:48 incluya
Courier New, Courier, monospace; font-size: x-small;»> drwxr xr-x-4 usuarios gcc 4096 23 de enero 15:47 guiones
gcc @ luke-debian: ~ / build / host / t $ hacer savedefconfig
GEN / home / gcc / build / host / t / Makefile
gcc @ luke-debian: ~ / build / host / t $ ll-a
drwxr-xr-x 4 usuarios gcc 4096 23 de enero 15:48
<. div> drwxr-xr-x 10 usuarios gcc 4096 23 de enero 15:25 ..
Courier New, Courier, monospace; font-size: x-small;»>-r rw–. r- – 1 usuarios gcc 50979 23 de enero 15:48 config.old
-rw-r – r – 1 usuarios gcc 2909 23 de enero 15:48 defconfig
drwxr-xr-x 5 usuarios gcc 4096 23 de enero 15:48 incluya
-rw-r – r – 1 usuarios gcc 624 23 de enero 15:48 Makefile
Courier New, Courier, monospace; font-size: x-small;»> lrwxrwxrwx usuarios 1 gcc 26 de enero 23 15:48 fuente -> / home/gcc/src/linux-3.12.2
Esta vez, vamos a generar. config través de un archivo vexpress_defconfig. Es diferente de la «alldefconfig». Cuando generamos el delta en «defconfig», podemos ver el tamaño del archivo «defconfig» ya no esté vacío. Cuando dif nuestro «defconfig» con «vexpress_defconfig» en «$ src / arch / brazo / configs / vexpress_defconifg», podemos ver que la diferencia es muy pequeña:
0A1
> CONFIG_EXPERIMENTAL = y
Courier New, Courier, monospace; font-size: x-small;»>> # CONFIG_USER_NS no se establece
12a15
> # CONFIG_CC_OPTIMIZE_FOR_SIZE no se establece
25a29
Courier New, Courier, monospace; font-size: x-small;»> 44a49, 50
> CONFIG_MTD_CONCAT = y
> CONFIG_MTD_PARTITIONS = y
45a52
> CONFIG_MTD_CHAR = y
Courier New, Courier, monospace; font-size: x-small;»>> CONFIG_MTD_ARM_INTEGRATOR = y
> CONFIG_MISC_DEVICES = y
55a65
> CONFIG_NET_ETHERNET = y
Courier New, Courier, monospace; font-size: x-small;»>> # CONFIG_NETDEV_1000 no se establece
61d72
63a75
Courier New, Courier, monospace; font-size: x-small;»> 84a97
> CONFIG_HID_SONY = y
92a106
> # CONFIG_USB_DEVICE_CLASS no se establece
Courier New, Courier, monospace; font-size: x-small;»>> CONFIG_NFS_V3 = y
109a125
> # CONFIG_RPCSEC_GSS_KRB5 no se establece
112 113 d127
Courier New, Courier, monospace; font-size: x-small;»>
> CONFIG_DEBUG_FS = y
117a133, 134
> CONFIG_DEBUG_INFO = y
Courier New, Courier, monospace; font-size: x-small;»> 118a136
> CONFIG_DEBUG_ERRORS = y
La razón por la que existe menor diferencia entre nuestro defconfig y «vexpress_defconfig» es «vexpress_defconfig» se genera de nuevo una imagen del núcleo a la vez. Cuando se libera el kernel, algunos de sus valores de configuración por defecto ha cambiado. Nuestro «defconfig» se genera en contra de la versión del kernel de liberación. Existe que el suero menor diferencia se explica. Ahora podemos copiar nuestro defconfig en $ src / arch / brazo / configs / defconfig. La próxima vez que hacemos «hacemos defconfig», se utilizará nuestra plantilla config recién guardado
gcc @ luke-debian: ~ / build / host / t $ cp defconfig .. / ../../src/linux-3.12.2/arch/arm/configs /
gcc @ luke-debian: ~ / build / host / t $ make defconfig
GEN / home / gcc / build / host / t / Makefile
*** configuración por defecto se basa en ‘versatile_defconfig’
#
# Configuración escrito a config
#
¿Por qué nuestra agua» no se utiliza defconfig «? La razón es:
gcc @ luke-debian: ~ / build / host / t $ vi .. / ../../src/linux-3.12.2/arch/arm/Makefile
….
28 # <. b> No utilice arch / brazo / defconfig – siempre es obsoleta b>
29 # Seleccione un tht plataforma se mantiene al día
30 KBUILD_DEFCONFIG: = versatile_defconfig
……
Vamos. Vamos a cambiar a « KBUILD_DEFCONFIG: = defconfig». Esta vez, debería funcionar:
gcc @ luke-debian: ~ / build / host / t $ make defconfig
GEN / home / gcc / build / host / t / Makefile
*** configuración por defecto se basa en ‘defconfig’
# Configuración «> #
escrito. config
#
gcc @ luke-debian: ~ / build / host / t $ ll-a
total de 128
usuarios drwxr-xr-x 4 gcc 4096 23 de enero 16:13
drwxr-xr-x 10 usuarios gcc 4096 23 de enero 15:25 ..
-rw-r – r – 1 usuarios gcc 50979 23 de enero 16:13 config
-rw-r – r – 1 usuarios gcc 50979 23 de enero 16:13 config.old
-rw-r – r – 1 usuarios gcc 2909 23 de enero 15:48 defconfig
drwxr xr-x-5 usuarios gcc 4096 23 de enero 15:48 incluya
-rw-r – r – 1 usuarios gcc 624 23 de enero 16:13 Makefile
drwxr-xr-x 4 usuarios gcc 4096 23 de enero 15:47 guiones
lrwxrwxrwx 1 usuarios gcc 26 de enero 23 16:13 fuente -> / home/gcc/src/linux-3.12.2
gcc @ luke-debian: ~ / build / host / t $ diff config config.old
Podemos ver la config (generada por nuestro nuevo defconfig) y. . config.old (generado a través vexpress_defconfig) es exactamente el mismo. Nuestra plantilla trabaja!
Si usted tiene un archivo de configuración de edad, y desea realizar una personalización basada en ella. Usted puede copiarlo en su directorio build y cambiarle el nombre a «. Config». Por ejemplo, mi debian 7 tiene un archivo de configuración en / boot / para el kernel existente
$ ls / boot/config-3.2.0-4-amd64
/ boot/config-3.2.0-4-amd64
gcc @ luke-debian:. ~ / build / host / t $ cp / boot/config-3.2.0-4-amd64 config
gcc @ luke-debian: ~ / build / host / t $ make oldconfig
config: 488: aviso: valor del símbolo ‘m’ no válido para ACPI_PCI_SLOT
. config: 490: aviso: valor del símbolo ‘m’ no válido para ACPI_CONTAINER
config:. 491: aviso: valor del símbolo ‘m’ no válido para ACPI_HOTPLUG_MEMORY
config:. 1565: aviso: valor del símbolo ‘m’ no válido para BMP085
config:. 2975: aviso: valor del símbolo ‘m’ no válido para POWER_SUPPLY
config:. 3210: aviso: valor del símbolo ‘m’ no válido para MFD_WM8400
config:. 4699: aviso: valor del símbolo ‘m’ no válido para COMEDI_MISC_DRIVERS
de configuración:. 4706: aviso: valor del símbolo ‘m’ no válido para COMEDI_PCI_DRIVERS
config:. 4763: aviso: valor del símbolo ‘m’ no válido para COMEDI_PCMCIA_DRIVERS
de configuración:. 4771: aviso: valor del símbolo ‘m’ no válido para COMEDI_USB_DRIVERS
*
* Reiniciar config …
*
*
* Configuración general
*
Cross-compilador herramienta prefijo (CROSS_COMPILE) []
compilación también los conductores que no se carga (COMPILE_TEST) [N / y /?] (NEW)
«make oldconfig» me va a pedir para dar respuestas a todas las opciones no existentes en la antigua configuración. Eso es bastante molesto. Me gustaría tener todas las nuevas opciones para tener valores por defecto:
gcc @ luke-debian: ~ / build / host / t $ hacer olddefconfig
gcc @ luke-debian: ~ / build / host / t $ hacer silentoldconfig
Esto me ahorrará un montón de mecanografía de «Y / N. ..».
Si estoy haciendo una compilación nativa para mi máquina de trabajo actual, por lo general hará lo siguiente:
# generar un archivo de configuración por defecto para la corriente ARCH
hacer x86_64_defconfig
# deshabilitar todos los módulos que no estén cargados en la máquina actual en el archivo de configuración
hacer localmodconfig
# Si yo no quiero generar un initrd, voy a compilar todos los módulos actualmente necesarios en el núcleo
crea localyesconfig
# entonces voy a multar configuración sintonizar ahora con menuconfig
make menuconfig
Una advertencia aquí es «hacer localmodconfig» sólo desactivar los módulos no se están ejecutando actualmente en el equipo, pero no va a permitir que los módulos de auto que actualmente está ejecutando en su máquina. De cualquier forma, emitirá la advertencia para usted para los módulos perdidas. Puedes añadirlas ustedes
Si estoy haciendo una compilación cruzada, a continuación:
# seleccionar una configuración de tablero de incumplimiento bajo $ src / arch / $ {arch} / configs que la mayoría responden a su placa de destino, y lo utilizan como punto de partida
haga vexpress_defconfig
# ajustes finos
make menuconfig
Hay otra dos opciones de configuración:
gcc @ luke-debian: ~ / construir / host / tk $ make ayuda | Allyes grep
allyesconfig – Nueva config donde todas las opciones se aceptan con un sí
gcc @ luke-debian: ~ / build / host / tk $ make ayuda | grep allno
allnoconfig – Nueva config donde todas las opciones son contestadas sin
Si usted es realizar una generación nativa, se puede hacer «make allyesconfig» en primer lugar, a continuación, utilice «hacer localmodconfig» para eliminar los módulos no necesarios, y, finalmente, usar «make menuconfig» para afinar las opciones.
5. cabeceras del núcleo
«crea headers_install» instalará los encabezados de los actuales $ {ARCH} a «INSTALL_HDR_PATH». Si desea instalar las cabeceras de todos los arcos, se puede usar «make headers_install_all». El directorio de cabeceras jerarquía mirada instalada como esto:
(arquitecturas multi) />
$ {INSTALL_HDR_PATH}
└ ─ ─ incluir las etiquetas
├ ─ ─ arco
├ ─ ─ asm-alpha