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.
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
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
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: