Te contaré una situación divertida que me pasó y cómo convertirme en colaborador de un proyecto famoso.
No hace mucho estaba trasteando con una idea: cargando Linux directamente desde UEFI…
La idea no es nueva y existen varios manuales sobre este tema. Puedes ver uno de ellos.
En realidad, mis intentos de larga data por resolver este problema dieron como resultado un acuerdo completamente formalizado. . La solución funciona bastante y la uso en algunas de las máquinas de mi hogar. Esta solución se describe con un poco más de detalle. .
La esencia del arranque UEFI radica en que la partición ESP (EFI System Partition) se combina con el directorio /boot. Esto significa que todos los kernels e imágenes de arranque (initrd) se encuentran en la misma partición desde la cual UEFI puede ejecutar archivos ejecutables y, en particular, cargadores de arranque. Sin embargo, el kernel en sí mismo Linux Muchas distribuciones ya vienen compiladas con la opción UEFISTUB, que permite que el propio kernel se inicie desde UEFI.
Esta solución tiene un momento desagradable: la partición ESP está formateada en FAT32, en la que es imposible crear enlaces físicos (que el sistema crea regularmente cuando actualiza el initrd). Y no hay nada particularmente criminal en esto, pero ver advertencias del sistema al actualizar los componentes del kernel no es muy agradable...
Hay otra manera.
El gestor de arranque UEFI (aquel donde se debe registrar el gestor de arranque del sistema operativo) puede hacer otras cosas además de gestionar gestores de arranque/núcleos. Linux También se pueden cargar los controladores. Así, puedes cargar el controlador del sistema de archivos donde se encuentra tu directorio /boot y cargar el kernel directamente desde allí usando UEFI. El controlador, por supuesto, debe ubicarse en la partición ESP. Esto es básicamente lo que hacen los gestores de arranque como GRUB. Pero la clave está en que todas las funciones de GRUB de uso frecuente ya están disponibles en UEFI. Más precisamente, en su gestor de arranque. Y, para ser aún más técnicos, el gestor de arranque UEFI incluso tiene más capacidades en algunas áreas.
Parece una solución hermosa, pero hay un "PERO" (o mejor dicho, lo era, pero hablaremos de eso más adelante). El caso es que el sistema de controladores UEFI es bastante sencillo. No existe tal cosa como montar un sistema de archivos o asociar un controlador con un dispositivo específico. Hay una llamada al sistema con el nombre convencional Map, que toma a cada conductor por turno e intenta asociarlo con todos, al menos los dispositivos adecuados. Y si el conductor pudo recoger el dispositivo, se crea un mapeo: un registro de conexión. Así es exactamente como se debe inicializar el controlador recién cargado en un montón común con todos los demás. Y todo lo que necesita es establecer un bit (LOAD_OPTION_FORCE_RECONNECT) en 1 en el registro de inicio del controlador y UEFI realizará esta reasignación global después de cargarlo.
Pero esto no es tan fácil de hacer. La utilidad estándar efibootmgr (que se utiliza para configurar el administrador de descarga UEFI) no sabe (o mejor dicho, no sabía cómo) configurar este bit. Tuve que instalarlo manualmente mediante un procedimiento bastante complicado y peligroso.
Y una vez más, habiendo intentado hacerlo con las manos, no pude soportarlo y formalizaré pidiendo a los desarrolladores que agreguen esta característica.
Pasaron varios días, pero nadie prestó atención a mi pedido. Y por curiosidad, miré el código fuente... lo bifurqué y descubrí de rodillas cómo agregar esta característica... "De rodillas" porque no instalé nada de eso y edité el código fuente. código directamente en el navegador.
Conozco C (el lenguaje de programación) muy superficialmente, pero esbocé una solución aproximada (principalmente copiar y pegar)... y luego pensé: al menos probablemente tengo muchos errores allí (mis intentos anteriores de editar el archivo de otra persona El código C se completó aproximadamente la décima vez). Emitiré una solicitud de extracción. Bien .
Y allí resultó que Travis CI estaba adjunto para verificar las solicitudes de extracción. Y él diligentemente me contó todos mis errores. Bueno, si hay errores conocidos, no hace falta arreglarlo: de nuevo, directamente en el navegador, y al cuarto intento el código funcionó (un logro para mí).
Así pues, sin salir del navegador, convertí una solicitud de extracción muy real en una utilidad que se utiliza en casi todas las distribuciones modernas. Linux.
Me sorprendió el hecho de que, sin conocer realmente el idioma, sin configurar nada (las dependencias requieren bastantes bibliotecas para el ensamblaje) y sin siquiera ejecutar el compilador, simplemente "codifiqué" una característica completamente funcional y útil en el navegador .
Sin embargo, mi solicitud seguía sin respuesta desde el 19 de marzo de 2019 y ya había comenzado a olvidarme de ella.
Pero ayer se añadió esta solicitud al master.
Entonces, ¿de qué se trata mi historia? Y se refiere al hecho de que, en el marco de las tecnologías modernas, resultó que el código real ya se puede escribir en el navegador, sin implementar ninguna herramienta de desarrollo ni dependencias localmente.
Además, debo admitir que esta ya es mi segunda solicitud de extracción para utilidades conocidas (al menos en círculos reducidos). La última vez, mi solicitud para corregir la visualización de algunos campos en la interfaz web de SyncThing resultó en mi edición literalmente de una línea en un entorno que no conozco en absoluto.
Solo los usuarios registrados pueden participar en la encuesta. por favor
¿Debería escribir más o no?
sí
no vale la pena
294 usuarios votaron. 138 usuarios se abstuvieron.
Fuente: habr.com
