Tutoriales Manuales, tutos, recetas, postres, etc

Respuesta
 
Herramientas
  #1  
Viejo 07/01/22, 15:20:02
Array

[xs_avatar]
diamantecero diamantecero no está en línea
Usuario poco activo
 
Fecha de registro: mar 2018
Mensajes: 3
Modelo de smartphone: victoria 2
Tu operador: Movistar
Configurar y Compilar un Kernel a Medida. (En Construccion)

Saludos, poco a poco, iré construyendo un kernel para un teléfono, pero antes debo hacerlo para ubuntu o debian meramente. Así estaré mas preparado y tendré mejor dominio del tema.

Nota: Recomiendo 1ero leer todo antes de comenzar, así podrán ahorrase tiempo y tomar el mejor camino. Ya que yo comencé de la forma mas difícil, porque quería aprender lo máximo, y saber que hacer al encontrarme algún error y no estancarme tanto tiempo sin avanzar, también deben estar atentos y no confundir la terminar de la maquina virtual a la de la física, suele ser fácil confundirse y equivocarse en el momento de aplicar comandos. Se los dice alguien que trabajo con servidores teniendo muchas terminales abiertas al mismo tiempo.
También deben tener presente que al momento de instalar un kernel nuevo, si usan drivers privados, los perderán, aun que según ley en estas versiones mas recientes, no se pierden, esa parte de momento no la he revisado o probado, usaría el drivers generico, a menos que ingresaran ese modulo al momento de compilar.

Equipo que utilizare:

HP PavilionTS 15 Notebook PC - (15-n210dx)
Microprocessor: 1.6GHz up to 2.4GHz AMD Quad-Core A8-4555M
RAM: 8 GB DDR3L , viene por defecto con solo 4GB de RAM
Video Graphics: AMD Radeon HD 7600G Discrete-Class graphics and up to 2147MB total graphics memory

# 1era fase, todo se realizara en una maquina virtual
# 2da fase, se aplicara en la maquina física, para la construcción final de diferentes tipos de configuraciones de un kernel.
# 3er fase construcción desde cero y/o adaptación de un kernel generico para un teléfono android modelo Victoria 2. con el fin de poder actualizar su versión android 4.4.4 a una versión mas actual y acorde con sus características de hardware.

Tratare de describir todo paso a paso, como para que cualquier otro usuario pueda realizar el mismo procedimiento para construir u optimizar su kernel, tanto de PC como de Teléfono, etc. Esto sera como mi reto personal, y darle una cachetada a youtube (Google) que me tiene arrecho, ya que en múltiples ocasiones no me a permitido publicar información que solo es ayuda para otros internautas (censurandome), y sobre todo por prohibirme la utilización de apk que por ser de versiones anteriores a la versión android 4.4.4 , no permite que se puedan actualizar de forma normal para usarlas. Obligándonos a desechar nuestro teléfono para adquirir uno nuevo, Así la famosa programación de obsolescencia sale a la palestra. Se olvidan que sin la ayuda de los miles de programadores que existimos no serian nada.

* Adicionalmente, tratare de buscar la forma de automatizar la configuración de forma universal de un kernel para cualquier equipo, quizás a través de un script que permita detectar el hardware en uso para luego solo compilar y añadir los driver necesitados, también la creación de varios kernel customizados o adaptados para realizar una tarea en especifica, como por ejemplo: para trabajar con blender, gimp, juegos en linea, seguridad, etc y si es posible crear un menú para poderlos seleccionar e instalar según el requerimiento del momento o simplemente añadiéndolos al menú grub. La imaginación es el limite, recuerda quien controla el Kernel, controla el Sistema Operativo. Es el único camino para la independencia tecnológica y tener el control de tu equipo.

* Nota: Como he tenido muchos problemas con el mal servicio eléctrico (Bajones de luz, etc) [he perdido varias compilaciones de horas, y he tenido de comenzar desde cero varias veces, por estos inconvenientes] y con la internet por consiguiente, no se que tan rápido desarrollare esta guía, solo pido paciencia, si alguien tiene sugerencias, solo escriba. Durante la construcción de esta guiá, la estaré modificando y actualizando cada cierto tiempo, hasta lograr tenerla lo mas presentable visualmente, clara y fácil de entender.

################################################## ################################
########## Comandos Utilizados y enlaces interesantes como complemento: ##########
################################################## ################################
## dpkg -l | grep nombre-paquete # muestra si un paquete se encuentra instalado
## :~$ lspci # lista todos los componentes tipo pci (Peripheral Component Interconnec) como son las tarjetas de red, tarjetas de sonido o tarjetas de televisión.
## :~$ dmesg # muestra el contenido de el hardware.
## :~$ sudo passwd root # hay que crear un password para root, ubuntu no lo crea por defecto
## :~$ su - # opcional, si decide trabajar como root
## Password: (introduces la clave para ser root, previamente creada), asi pasas a ser root
## :~$ sudo *recuerda utilizar anteponiendolo a un comando, solo para conceder permisos de root
## :~$ lsb_release -d # muestra la distribución de Linux y el número de versión en uso
## :~$ uname -r # información del kernel en uso
#############
## :~$ dpkg -l | grep linux-image # muestra todos los núcleos del equipo.
## la salida sera:
## rc linux-image-5.11.0-27-generic 5.11.0-27.29~20.04.1 amd64 Signed kernel image generic
## ii linux-image-5.11.0-44-generic 5.11.0-44.48~20.04.2 amd64 Signed kernel image generic
## ii linux-image-5.11.0-46-generic 5.11.0-46.51~20.04.1 amd64 Signed kernel image generic
## ii linux-image-generic-hwe-20.04 5.11.0.46.51~20.04.23 amd64 Generic Linux kernel image
### rc : significa que el paquete está en estado de eliminación/desinstalación y solo existe el archivo de configuración.
### ii : Significa que el paquete está en estado de instalación y está 100% instalado en el sistema.
## :~$ dpkg -l |grep -i "linux-image*" | awk '{print $2}'
### la salida sera:
## linux-image-5.11.0-27-generic
## linux-image-5.11.0-41-generic
## linux-image-5.11.0-43-generic
## linux-image-5.11.0-44-generic
## linux-image-5.11.0-46-generic
## linux-image-generic-hwe-20.04
############
##################################################
############ Información del comando: make deb-pkg
##################################################
# sudo make deb-pkg , genera hasta 5 paquetes Debian:
# linux-image-versión # que contiene la imagen del núcleo y los módulos asociados,
# linux-headers-versión # que contiene los archivos de cabecera necesarios para crear módulos externos,
# linux-firmware-image-versión # que contiene los archivos de firmware necesarios para algunos controladores (este paquete puede no estar presente cuando se compila el kernel a partir de las fuentes proporcionadas por Debian),
# linux-image-versión-dbg # que contiene los símbolos de depuración para la imagen del núcleo y sus módulos y
# linux-libc-dev # que contiene las cabeceras relevantes a algunas bibliotecas de espacio de usuario como glibc de GNU.
##################################################
################################################## ###
##### Instalar y desinstalar kernel
################################################## ###
## :~$ uname -a # muestra la versión del kernel, arquitectura:
Linux ubuntu 5.11.0-46-generic #51~20.04.1-Ubuntu SMP Fri Jan 7 06:51:40 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
## :~$ uname -r # solo muestra la versión del kernel:
5.11.0-46-generic
## :~$ sudo dpkg -i linux*.deb # instala el .deb asignado
## :~$ sudo apt purge linux-image-5.11.0-27-generic # elimina el nucleo asignado
## :~$ sudo apt purge linux-image-xxx* linux-headers-xxx* # otra forma por revisar
## Actualizar el GRUB
## :~$ sudo update-grub
################################################## ###
################################################## ###
############
## :~$ lsmod # muestra los módulos del kernel cargados ahora mismo.
## Los módulos del kernel son archivos con extensión ".ko" (de "kernel object") y se encuentran en la carpeta /lib/modules/$(uname -r).
## :~$ modinfo nomModul: muestra información sobre el módulo indicado (ruta, descripción, licencia, autor, dependencias, ... y sobre todo, la lista de parámetros que puede admitir). Esta información se puede filtrar con diferentes parámetros; por ejemplo, modinfo -p nomModul sólo muestra los parámetros que puede admitir, modinfo -n nomModul sólo muestra la ruta, etc.
## Otra herramienta que se puede utilizar para obtener información sobre un determinado módulo (incluida en el paquete "sysfsutils") es SysTools -v -m mac80211_hwsim (donde, por ejemplo, mac80211_hwsim es un módulo que permite simular tarjetas wifi)
## :~$ ldconfig -v # regenera la caché de librerias, Para poder ver algo, activamos el verbose a 1, si no muestra información.
## Muy Util * link referencia: https://www.javieranto.com/kb/GNU-Linux/Sistema/kernel
## Manejo de los módulos, link: http://www.l3jane.net/doc/linux/suse...s/ch10s04.html
###########
## :~$ sudo make # se usa para compilar, posee varias opciones consulta: make --help
## Explicacion del comando make , link de referencia util: https://unix.stackexchange.com/quest...ilding-process
## * Creación de un archivo de configuración para el kernel desde cero, se puede utilizar:
## make config, make menuconfig, o make xconfig - Link referencia: http://structio.sourceforge.net/guia...io/apcs02.html
## * make menuconfig: interfaz de línea de comandos ncurses reemplazada por nconfig
## * make nconfig: Nueva interfaz ncurses para la línea de comandos
## * make xconfig: interfaz gráfica fácil de usar que requiere la instalación de packagekit-qt5 como dependencia. Este es el método recomendado, especialmente para usuarios menos experimentados, ya que es más fácil de navegar y también se muestra información sobre cada opción.
## * make gconfig: Configuración gráfica similar a xconfig pero usando gtk. Esto requiere gtk2 , glib2 y libglade AUR.
#### usando: sudo make ARCH=x86_64 x86_64_defconfig ,se crea el .config default para 64 bits, tiene solo esto asi:
#### CONFIG_SYSTEM_TRUSTED_KEYRING=y
#### CONFIG_SYSTEM_TRUSTED_KEYS=""
#### no hubo ningun error, no fue necesario relizar cambios.
## x86_64_defconfig para comparar: https://github.com/torvalds/linux/bl...6_64_defconfig
## aquí hablan un poco del menú de configuración del kernel, link referencia: https://linuxcenter.es/component/k2/...l-kernel-linux
## make oldconfig - Link referencia: http://www.l3jane.net/doc/linux/suse...s/ch10s03.html
## El comando make oldconfig utiliza el archivo /usr/src/linux/.config como plantilla para la configuración actual del kernel. En caso de haber añadido nuevas
# :~$ sudo make # forma normal y la mas lenta, mi equipo se tardo, 18 horas
# :~$ sudo make -jX # Donde X sera un número como de 2 o 4. Si tiene un doble núcleo, 2 o 3 podrían ser buenos. Cuatro núcleos, utilizar de 4 o 6. ¡No se recomienda trabajar con números grandes a menos que quiera que su máquina sea muy lenta!
# :~$ sudo make -j6 # así se realizaran 6 trabajos en simultaneo, sera mas rápido, claro si su equipo aguanta.
# :~$ sudo make modules_install 2>&1 | tee make-modules.txt # imprime toda la salida de consola en archivo: make-modules.txt
# asi podremos revisar si existen errores.
## make >&log - copia el archivo log [registro] en el directorio actual, se tarda algo el proceso, para ver contenido: cat log o utilizar algun editor.
## make 2>&1 | tee make.txt # se tarda un poco el proceso, imprime en el archivo la salida de consola
## opciones a las fuentes del kernel empleadas actualmente, el script le pregunta ahora sobre las mismas.
## Si el archivo .config no existe, se utilizará una configuración predeterminada (“default”) incluida en las fuentes del kernel.
## * nota personal, revisar esto después: Kernel de Linux /etc/sysctl.conf -> Refuerzo de la seguridad, link referencia: https://www.cyberciti.biz/faq/linux-...ity-hardening # hablan de como configurar el kernel para aumentar la seguridad.
## * Instalacion de un kernel experimental, link: https://es.linuxcapable.com/how-to-i...n-11-bullseye
## * creando un kernel optimo, referencia vieja pero util: http://newbiedoc.sourceforge.net/system/kernel-pkg.html
## * compilando kernel ubuntu versiones viejas, link referencia: https://help.ubuntu.com/community/Kernel/Compile
## link kernel de pruebas de ubuntu: https://kernel.ubuntu.com/~kernel-ppa/mainline
##### Liquorix es un Kernel diseñado de forma tal, de que sirva de forma como reemplazo eficiente del Kernel original de cualquier ##### Distribución (Distro) Linux. Tiene como objetivo, usar la mejor fuente como base del Kernel y configuraciones para optimizar las cargas de trabajo, para el ambiente de escritorio, multimedia y juegos.
##### link: https://liquorix.net y https://launchpad.net/~damentz/+archive/ubuntu/liquorix
################################################## #################################
################################################## #################################
## ** Existen diferentes tipos de kernel ( GNU/Linux (monolítico) - GNU/Hurd (Micronúcleo), a tener en cuenta...
################################################## #################################
#### * se puede trabajar con las fuentes de un kernel, tomando diferentes caminos:
## 1.- desde el sitio de referencia u habitual para muchos: https://www.kernel.org
## 2.- desde el propio desarrollador, como por ejemplo: https://git.kernel.org/pub/scm/linux...alds/linux.git
## 3.- desde la fuente principal de debian: https://www.debian.org o https://wiki.debian.org/BuildADebianKernelPackage
## 4.- desde https://kernel.ubuntu.com/git
## * nota: obtener los fuentes del núcleo de linux desde los repositorios de Debian y no desde kernel.org, implicaría que ya contienen todos los parches de seguridad que aplica la gente de Debian. ** por verificar
## A tomar en cuenta: dependiendo de la distribución, la compilación podría ser diferente, para cada distro.
## pruebas de rendimientos para linux, link: https://www.linuxadictos.com/benchma...ndimiento.html
################################################## #################################

################################################## #####################################
############################### Inicio Errores y Soluciones ###########################
# Errores y soluciones durante la compilación al usar el comando make con la configuración actual, por 1era vez, solo como referencia por si se le presenta a alguien.
:~$ sudo make # inicia la compilación, sudo si no eres root
# al iniciar, en la primera linea, me salio este error:
arch/x86/Makefile:142: CONFIG_X86_X32 enabled but no binutils support
# y continuo el proceso de compilacion.
# para corregir el error, realize el proceso que indican aquí: https://stackoverflow.com/questions/...ut-no-binutils
# en resumen se debe hacer lo suiguiente:
# CONFIG_X86_X32 (x32 ABI para el modo de 64 bits) debe establecerse en N para resolver el problema relacionado con la compatibilidad con binutils.
# sudo nano .config # ubicarme en la linea 685 que dice: CONFIG_X86_X32=y cambiar por n, salir y guardar cambios.

# luego de aproximadamente 30 Minutos, dio estos 2 errores:
make[1]: *** No rule to make target 'debian/canonical-certs.pem', needed by 'certs/x509_certificate_list'. Stop.
make: *** [Makefile:1868: certs] Error 2
# el error, se corrige, editando el archivo: .config
# ubicar la linea: CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem"
# y dejarla así: CONFIG_SYSTEM_TRUSTED_KEYS=""
# usando algun editor como el nano o vim
:~$ nano .config # casi al final del archivo esta ese parametro
# o también, mas rápido, se puede realizar el cambio por consola de la siguiente manera:
:~$ scripts/config --disable SYSTEM_TRUSTED_KEYS # esta forma no la probé, la dejo por si usa otro distro
:~$ scripts/config --set-str SYSTEM_TRUSTED_KEYS "" # funciona en ubuntu 20.04, corrige el error 1

# se procede a compilar y sale otro error 2 similar, se corrige así:
# ubicar la linea: CONFIG_SYSTEM_REVOCATION_KEYS="debian/canonical-revoked-certs.pem"
:~$ scripts/config --set-str SYSTEM_REVOCATION_KEYS "" # corrige el error 2

## tomar en cuenta en caso de problemas, link de referencia:https://unix.stackexchange.com/quest.../294116#294116
## recomendaron comentar dentro del .config los 3 siguientes CONFIG_, anteponerles un (#), por probar lo de comentar las 3 lineas
## CONFIG_TRUSTED_KEY
## CONFIG_SYSTEM_TRUSTED_KEYRING
## CONFIG_SYSTEM_TRUSTED_KEYS=""
Me encontré con esto hace varios años en una compilación de Debian. En el archivo .config que copió de /boot, busque y comente las líneas CONFIG_SYSTEM_TRUSTED_KEY y CONFIG_MODULE_SIG_KEY.

Durante la compilación, puede usar su propio certificado o simplemente usar un certificado único aleatorio.

Su configuración de kernel personalizada debe ser
basado en el archivo apropiado provisto en linux-source-4.5. Éstas tienen
CONFIG_MODULE_SIG_ALL, CONFIG_MODULE_SIG_KEY y
Se eliminó la configuración de CONFIG_SYSTEM_TRUSTED_KEYS para que los núcleos personalizados
obtener módulos firmados por una clave de un solo uso.

# link de referencia: https://lists.debian.org/debian-kern.../msg00579.html

:~$ sudo make # luego de 18 Horas, termina la compilación con un error 3, que es el siguiente:
BTF: .tmp_vmlinux.btf: pahole (pahole) is not available
Failed to generate BTF for vmlinux
Try to disable CONFIG_ soluciónDEBUG_INFO_BTF
make: *** [Makefile:1183: vmlinux] Error 1
### error 3, solución
:~$ sudo apt install dwarves # me falto instalar este programa, ya fue agregado al principio, esto solo es para recordar el error cometido.
## * nota: aquí para no volver a esperar tanto tiempo, optimizare el VMware para que sea mas rápida la compilación.
# coloque 6GB RAM, y coloque 4 CPU al VMware, la RAM la volvi a colocar de 4GB luego de otras pruebas, para no trabar la maquina fisica
# adicionalmente, deshabilite la pantalla tactil, ya que ni la uso, aplicando:
# :~$ xinput # lista los dispositivos de entrada
# :~$ xinput disable 9 # deshabilitar el dispositivo de entrada id=9
# :~$ sudo make # para mayor rapides utilizarlo con la opcion -j , el proceso tardo 10 horas sin este parametro.
La opción -j jobs especifica el número de trabajos (comandos) que se ejecutarán simultáneamente. Si hay más de una opción -j , la última es efectiva. Si la opción -j se da sin un argumento, make no limitará el número de trabajos que se pueden ejecutar simultáneamente. Ejemplo:
# :~$ sudo make -j4 # realizar 4 procesos en simultaneo, todo depende de las caracteristicas de su equipo
# el equipo se me colgo en 2 ocaciones, y revisando los logs, encontre este error que fue el que me llamo la atencion:
EDAC amd64: Error: F1 not found: device 0x1601 (broken BIOS?)
# revisando en foros, decidi probar realizando lo siguiente como root: echo "blacklist amd64_edac_mod" >> /etc/modprobe.d/blacklist.conf
Link de referencia: https://unix.stackexchange.com/quest...-in-system-log
##############################################
############################################## * Esta solución es solo para ciertas distribuciones
## Solución al error de dependencias incumplidas
## sudo apt-get autoremove
## sudo apt-get autoclean
## sudo apt-get update
## sudo apt-get -f install
## sudo apt-get install lubuntu-restricted-extras
## sudo apt-get install binutils-for-build
##############################################
##############################################
############################ Fin Errores y Soluciones ############################
################################################## #################################

##################################################
############## Información descriptiva o relevanta
############## uso de cada imagen del kernel: linux-xxx
#* linux-image-VERSION-PATCHLEVEL-FLAVOR, contiene la imagen del kernel que carga el cargador de arranque, un archivo que contiene la tabla de símbolos (utilizada por algunas herramientas del sistema), un archivo que contiene la configuración del kernel (informativo para el administrador del sistema) y módulos que se pueden cargar dinámicamente. Este es el paquete que se necesita para el uso normal del sistema.
#* linux-headers-VERSION-PATCHLEVEL-FLAVOR, contiene encabezados que se envían con el código fuente del kernel o se generan durante la compilación del kernel. Estos encabezados son necesarios para compilar módulos de kernel de terceros.
#* linux-libc-dev, contiene encabezados que se utilizan para compilar programas de espacio de usuario. Estos encabezados son compatibles con versiones anteriores (a diferencia de los encabezados que se usan para compilar los módulos del núcleo), por lo que no es necesario instalar varias versiones.
#* linux-doc-VERSION, contiene documentación del núcleo. Es útil para las personas que escriben módulos del kernel o diagnostican el comportamiento del kernel.
#* linux-source-VERSION, contiene las fuentes del núcleo. Las personas que quieran compilar su propio kernel pueden instalar este paquete binario y descomprimir el archivo que contiene.
#* linux-tools-VERSION, contiene herramientas que dependen de la versión del kernel. Actualmente solo hay perf.
# link de la fuente: https://unix.stackexchange.com/quest...g-a-kernel-for
#########################
# linux-image-extras # contiene todos los módulos del kernel "extra" que quedaron fuera.
# Contiene controladores adicionales que quedan fuera del paquete base del núcleo; instálelo solo si necesita estos controladores
#########################
# linux-image-generic-hwe-xxx - hwe(Hardware Enablement Stack)
# este Upgrade del núcleo y del servidor X en las versiones LTS lo denominan Hardware Enablement Stack o HWE y básicamente persigue el objetivo de mantener el soporte de nuevos dispositivos en aquellas nuevas instalaciones de cada nueva revisión de una LTS.
# Link fuente: https://computernewage.com/2019/09/1...-linux-kernel
# ejemplo para Activar el HWE de tu LTS en cada Nueva Revisión: Ubuntu 18.04.3
# que es la ultima edición de la actual LTS y que recoge la base de Ubuntu 19.04, de nombre clave Wily Werewolf:
sudo apt install --install-recommends linux-generic-hwe-18.04 xserver-xorg-hwe-18.04
reiniciar el sistema y revisar alguna actualizacion.
sudo apt update
##############
##############
#################################################

########################
# Preparando el terreno:
########################
# Existen 2 caminos que se pueden tomar desde el inicio:
# 1 utilizar la maquina que usamos o 2 una maquina a distancia, como por ejemplo usar los servidores en la nube de google. (para este tipo se realizaría una compilación del tipo cruzada, ya que estaríamos creando un kernel para nuestro equipo desde otro)
# tratare de explicar ambos caminos, iniciare con la 1 (maquina en uso)

############
# Fase # 1:
############
*Esta parte quizás no necesita mucha explicación, por si las dudas, te lo resumo.
# realice lo siguiente:
Fui al navegador y visite la pag oficial de VMware: https://www.vmware.com/latam/product...on-player.html # utilizada
Descargue el VMware (VMware-Player-Full-16.2.1-18811642.x86_64.bundle), también tienen una versión Pro de pruebas para 30 dias, esta la utilizare mas adelante, referencia aquí: https://www.vmware.com/latam/product...valuation.html # yo mas adelante, tu si quieres utiliza esta desde el inicio.
Instale el VMware de forma normal modo gratis (limitado)
luego fui al sitio: https://ubuntu.com , descarge la iso: ubuntu-20.04.3-desktop-amd64.iso
abrí el VMware e instale el iso de ubuntu, al finalizar, me arrojo solo este error: (no 3d support is available from the host), decidí seguir utilizándolo para ver que problemas se presentaban, solo tuve un inconveniente, como a las 2 horas se me colgó la laptop, tenia muchas ventanas en el navegador, pero no creo que allá sido el problema, así que resolví el problema del error, realizando el procedimiento que se muestra este video: ,

Solución al error de VMware: (no 3d support is available from the host)
1.- Cerrar el VMware, y dirigirse a la carpeta personal.
2.- Seleccionar la opción de mostrar archivos y carpetas ocultas, se mostrara la carpeta .vmware y dentro un archivo de nombre: preferences
3.- Abrir el archivo: preferences con algún editor y nos vamos al final del archivo y agregamos: mks.gl.allowBlacklistedDrivers = "TRUE"
4.- Guardar los cambios y salir (cerrar el archivo).
5.- Luego volvemos a des-tildar la opción de archivos y carpetas ocultas, preferiblemente.

*Nota: En la configuración del VMware, deje los valores predeterminados, solo cambie la RAM de 2 a -> 4 GB, al realizar las primeras pruebas, luego lo optimice lo que se puedo, active núcleos, deshabilite lo que no utilizaría, etc...
*Cabe recalcar que la rapidez de la compilación dependerá de las características del equipo en uso, lo que se realiza bajo virtualización sera un proceso mas lento que en una maquina física, así que trate de optimizar la configuración de VMware colocándole los mejores o mas altos valores para su funcionamiento, esto le ahorrara horas de espera durante la compilación. Yo realizare ambas pruebas para que pueda apreciar la diferencias, así podrá tomar su mejor camino hacia la construcción de un kernel optimo y no genérico o común (lleno de basura). Al realizarlo te sorprenderás de la diferencia que existe y desearas compilarlo todo tu mismo.

################
# Antes que nada, hay que preparar el terreno ( realizar respaldo e instalar las herramientas que se utilizaran)
################
1.- Se abre una ventana del terminal y se utiliza el comando:
:~$ sudo passwd root # crear un password para root, ubuntu no lo crea por defecto
passwd # introduces la nueva clave para root, y prosigues...
# Desde aquí tu decides si seguir como root o no, aun que seria mejor hacer todo como root, al fin y al cabo, crearas tu kernel
# Crear una carpeta de trabajo, en Home - Personal, para guardar respaldos, aun que ni la use, pero es bueno trabajar con orden,
y tomar precaución. (todo lo tratare de realizar solo por consola o el terminal)
#####
##### esta parte de crear una carpeta para respaldo la use mas que todo para comparar contenido de archivos.
:~$ mkdir kernelcustom # crea una carpeta de nombre kernelcustom
:~$ cd kernelcustom # ingresas dentro de esa carpeta
2.- este paso quizás no esa necesario, pero no esta de mas. crear una carpeta para guardar la configuración actual del kernel en uso.
:~$ mkdir kernelconfig # crea la carpeta que contendrá un archivo de nombre: .config (estará oculto)
:~$ cd kernelconfig # ingresamos para realizar respaldo aquí
:~$ cp -vi /boot/config-`uname -r` .config # copia la configuración actual del kernel en uso
# para asegurarnos de que se copia, si aplicamos el comando ls no mostrara nada, pero si usamos algún editor, como el nano o vim, veremos que si esta.
:~$ nano .config # debe salir la ventana con información, señal de que existe el archivo y contiene información.
# salimos sin realizar cambios, presionando Control X.
# * nota: el archivo .config si prefieres tener una copia visible, puedes hacerlo asi:
:~$ cp -vi .config configvisible # solo le quitas el punto y le colocas el nombre que quieras
## también se respaldara en la carpeta: kernelconfig (recuerda todo sobre la configuración del kernel, en uso)
:~$ uname -r # versión del kernel en uso
5.11.0-44-generic # salida de la información del kernel en uso
:~$ cd /home/tu-usuario/kernelcustom/kernelconfig/ # nos ubicamos donde haremos las copias de respaldo, solo si nos hemos movido de directorio
:~$ sudo cp /boot/System.map-5.11.0-44-generic /home/tu-usuario/kernelcustom/kernelconfig
:~$ sudo cp /boot/vmlinuz-5.11.0-44-generic /home/tu-usuario/kernelcustom/kernelconfig
:~$ sudo cp /boot/initrd.img-5.11.0-44-generic /home/tu-usuario/kernelcustom/kernelconfig
:~$ ls # listamos el contenidos de la carpeta, y nos mostrara una salida así:
initrd.img-5.11.0-44-generic vmlinuz-5.11.0-44-generic
System.map-5.11.0-44-generic
## recordar que nos mostrara solo 3 archivos, pero abra otro oculto el: .config

# con el navegador ir al sitio: https://www.kernel.org , seleccionar: stable: 5.15.13 2022-01-05 [tarball] - (para descargar)
# el archivo descargado desde el navegador (linux-5.15.13.tar.xz), por defecto se guarda en: /home/tu-usuario/Downloads
# para efectos de este tutorial o guiá, lo trabajare allí mismo, para probar si por defecto de configuración se puede compilar sin problemas desde allí con esta versión.
# aun que en algunos sitios, recomiendan trabajar en la carpeta: /usr/src/ (antiguamente era obligado porque los script estaban diseñados para trabajarlos así, veremos que tan estricta es esta regla hoy en día)
# para convertir un archivo .xz en .tar ,se aplica el comando: xz -d -v linux-5.15.13.tar.xz
# si da error, quizás te falte instalar algún paquete: sudo apt install xz-utils
# recuerda que algunos comandos se aplican en la carpeta en donde se este ubicado, si se quiere aplicar a una carpeta diferente, hay que escribir la ruta.

:~$ cd /home/tu-usuario/Downloads/ # nos ubicamos donde descargaremos o descargamos el archivo para descomprimirlo
:~$ tar -xf linux-5.15.13.tar.xz # con este comando descomprimimos
linux-5.15.13 # carpeta creada al descomprimir, pesa al rededor de 1.2GB
# antiguamente esta carpeta tendría que estar así: /usr/src/linux-5.15.13 , hoy día no es obligatorio, pero si eres conservador, a lo debian, y lo trabajas como root, quizás te evites algunos errores. * Te lo recomiendo, si vas iniciando.

#####################################
# Programas necesarios para compilar
#####################################
:~$ sudo apt install gcc flex bison build-essential make dh-make devscripts fakeroot debhelper debian-policy ccache dh-autoreconf autotools-dev kernel-package libncurses-dev pkg-config bc openssl libssl-dev dkms libelf-dev libudev-dev libpci-dev libiberty-dev libncurses5-dev autoconf dwarves
## ** kernel-headers kernel-devel ** esto no, son solo una referencia para mi, una prueba que hare mas a delante
# primero verificamos que tenemos todo actualizado.
:~$ sudo apt update # o si prefiere use: apt-get
:~$ sudo apt upgrade
#####################################

################################################## #
# 1ero se procede a evitar unos errores al compilar, aplicando los siguientes parámetros en consola:
################################################## #
#
# :~$ scripts/config --set-str SYSTEM_TRUSTED_KEYS "" # corrige el error 1
# :~$ scripts/config --set-str SYSTEM_REVOCATION_KEYS "" # corrige el error 2
#
# :~$ sudo nano .config # ubicarme en la linea 685 que dice: CONFIG_X86_X32=y cambiar por n, salir y guardar cambios.
## *Nota: la mejor forma de saber si todo resulto bien al realizar el comando make, es revisar los log. en busca de errores y posibles causa.
#
## si ya habia realizado alguna compilación. y va a realizar otra, recomiendan realizar limpieza, solo si es una compilación que implique otro kernel diferente, si es el mismo pero solo desea agregar o quitarle cosas lo puede dejar para que sea mas rapido el proceso.
################################################## ##

###################################
###### Previo a iniciar compilación
###################################
## limpiar todo de una previa compilación, se aplica lo siguiente:
## :~$ sudo make clean && make mrproper # aun que algunos dicen que es redundante, aplicar los 2, con solo mrproper bastaria.
:~$ sudo make mrproper # utilizado para limpiar una previa compilación, incluso borra el .config
###################################

################################################## ########
############## Diferentes formas de compilar, usando: make
################################################## ########
#########
# ** Nota: solo usa el make menuconfig, si vas a realizar cambios en la configuración o no posees un .config
######### cuando lo usas sobre escribe el .config del directorio, si ya tienes un .config como quieres en el directorio, no uses el comando make menuconfig. Por eso la precaución de un respaldo, por si se olvida.
:~$ sudo make menuconfig # menú de configuración para compilar el kernel
## si sale un error, de este tipo:
Your display is too small to run Menuconfig!
It must be at least 19 lines by 80 columns.
## se corrige solo ampliando la ventana

## 1era prueba solo salvar la configuración por defecto y luego compilar, sera una prueba de que todo esta funcional.
En la ventana del Menuconfig, seleccionamos Exit. para salir, sin realizar cambios, luego a (Y), para guardar la nueva configuración. Con esto se crea un nuevo archivo de configuración para el nuevo kernel, y el anterior (.config) ha sido renombrado como .config.old
# realizamos una copia del recién creado archivo de configuración .config (para comparar mas adelante)
:~$ cp .config config-5.15.13-custom

##################
#### make forma 1: es la forma mas lenta de proceder
##################

:~$ sudo make clean # limpieza de compilaciones previas, borra todo, incluso el .config
:~$ sudo make menuconfig # menu para establecer configuracion, si no tiene un .config a utilizar o ingrese solo para modificar algo
:~$ sudo make # forma mas lenta, tardo 18 horas
# con este proceso, se genero:
./arch/x86/boot/bzImage # imagen del kernel comprimida
./arch/x86_64/boot/bzImage # imagen del kernel comprimida

############## nota, en teoría esto optimizaría mas el kernel ** por verificar
# :~$ sudo make INSTALL_MOD_STRIP=1 modules_install # La opción INSTALL_MOD_STRIP=1 nos permitirá remover los símbolos de debug de cada módulo, Esto resultará en un initrd.img (initial RAM disk) más pequeño y compacto.
# link fuente: https://unix.stackexchange.com/quest...kernel-modules
# link referencia: https://blog.carreralinux.com.ar/201...ultimos-pasos
##############

:~$ sudo make modules_install # para instalar modulos * proceso tardo 2-3 horas
# los modulos los coloco en la ruta: usr/lib/modules/5.15.13

:~$ sudo make install # instala el kernel directamente
# en resumen hace lo siguiente:
Crea los archivos vmlinuz-xxx(el kernel propiamente dicho), initrd.img-xxx, System.map, y config-xxx.
los copiará en /boot, y modificará el archivo de configuración de GRUB para que el nuevo kernel sea utilizado por defecto al bootear el equipo.

:~$ reboot # Reinicia el equipo y prueba el nuevo kernel

###################
#### make forma 2 : mas rápido el proceso
###################
:~$ sudo make mrproper # limpieza previa
:~$ sudo make ARCH=x86_64 x86_64_defconfig # utiliza una configuracion para 64 bits, default

# sudo make ARCH=x86_64 menuconfig # se ingresa solo si se van a realizar cambios, si no, se procede con:

:~$ sudo make ARCH=x86_64 -j6 2>&1 | tee make.txt # fue rapido, tardo 22 Minutos, sin errores
# con este proceso, se genero:
./arch/x86/boot/bzImage # imagen del kernel comprimida
./arch/x86_64/boot/bzImage # imagen del kernel comprimida
make.txt # archivo que registra toda la salida de consola, seria el log

:~$ sudo make ARCH=x86_64 modules_install 2>&1 | tee make-modules.txt # fue rápido, quizás 1 minuto
# los modulos los coloco en la ruta: usr/lib/modules/5.15.13

######################################
## opcional si se desea crear los .deb
######################################
:~$ sudo make ARCH=x86_64 deb-pkg 2>&1 | tee make-deb.txt # duro 5 horas
# arrojo un error, de que faltaba linux-upstream, lo descargo e instalo solo y continuo con la creación de los .deb
# /home/tu-usuario/Downloads/ # lugar donde lo descargo y creo los .deb
linux-libc-dev_5.15.13-1_amd64.deb
linux-upstream_5.15.13-1.dsc
linux-upstream_5.15.13-1_amd64.buildinfo
linux-upstream_5.15.13.orig.tar.gz
linux-headers-5.15.13_5.15.13-1_amd64.deb
linux-upstream_5.15.13-1_amd64.changes
linux-image-5.15.13_5.15.13-1_amd64.deb
linux-upstream_5.15.13-1.diff.gz
#######################################

##### hasta aquí todo bien,

esta en revision de 1 error

:~$ sudo make install # para instalar el kernel directamente
## revisando, al reiniciar, muestra consola, con initramfs

:~$ reboot # Reinicia el equipo y prueba el nuevo kernel

########################### estaré un tiempo en esta parte, al regreso actualizo y agregare mas información

Última edición por diamantecero Día 16/01/22 a las 18:04:28. Razón: actualizo el contenido
Responder Con Cita


  #2  
Viejo 24/04/24, 19:52:27
Array

[xs_avatar]
serlongad serlongad no está en línea
Miembro del foro
 
Fecha de registro: may 2021
Mensajes: 51
Modelo de smartphone: SAMSUNG A 71
Tu operador: -
Gracias por compartirlo, me ayudo bastante a mi trabajo.





Visita https://www.innobit.mx
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > La Cocina de ROMs > Tutoriales



Hora actual: 22:53:39 (GMT +2)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2024 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /