Skip to content

Commit de64468

Browse files
author
Kilynho
committed
docs: Add comprehensive compilation troubleshooting guide
New COMPILATION_TROUBLESHOOTING.md provides: - Error classification system explanation (config/code/dependency) - Detailed solutions for each error type - How to interpret compilation reports - Kernel configuration best practices - Advanced verification techniques - Bug reporting guidelines - Recommended workflows Helps users understand: - Why compilation errors occur - How to distinguish autofix bugs from config issues - When to report bugs vs adjust configuration - How to verify and resolve errors independently
1 parent 242a3fc commit de64468

File tree

1 file changed

+248
-0
lines changed

1 file changed

+248
-0
lines changed

COMPILATION_TROUBLESHOOTING.md

Lines changed: 248 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,248 @@
1+
# Guía de Troubleshooting de Compilación
2+
3+
Esta guía te ayuda a entender y resolver errores de compilación cuando usas el sistema de autofix.
4+
5+
## 🎯 Sistema de Clasificación de Errores
6+
7+
El módulo de compilación clasifica automáticamente los errores en categorías:
8+
9+
| Tipo | Descripción | Causa | Solución |
10+
|------|-------------|-------|----------|
11+
| **config** | Símbolos no declarados | Falta `CONFIG_*` en `.config` | Habilitar flag en configuración |
12+
| **dependency** | Headers faltantes | Archivo no encontrado | Verificar includes y paths |
13+
| **code** | Errores de sintaxis/tipos | Bug real en código | Revisar/corregir código |
14+
| **unknown** | No clasificado | Diversas causas | Análisis manual |
15+
16+
## 🔍 Errores Comunes y Soluciones
17+
18+
### 1. Errores de tipo "config"
19+
20+
**Síntoma:**
21+
```
22+
error: 'envp_init' undeclared (first use in this function)
23+
error: redefinition of 'rd_load_image'
24+
```
25+
26+
**Causa:**
27+
Estos archivos dependen de configuraciones específicas del kernel (`CONFIG_BLK_DEV_INITRD`, `CONFIG_BLK_DEV_RAM`, etc.) que no están habilitadas en la configuración por defecto.
28+
29+
**Solución:**
30+
31+
#### Opción 1: Configuración manual específica
32+
```bash
33+
cd /path/to/kernel/linux
34+
make menuconfig
35+
# Habilitar:
36+
# - Device Drivers → Block devices → RAM block device support
37+
# - Device Drivers → Block devices → Initial RAM filesystem and RAM disk
38+
make
39+
```
40+
41+
#### Opción 2: Usar una configuración más completa
42+
```bash
43+
cd /path/to/kernel/linux
44+
# En lugar de defconfig, usar la configuración del sistema actual
45+
zcat /proc/config.gz > .config # Si está disponible
46+
# O copiar desde /boot
47+
cp /boot/config-$(uname -r) .config
48+
make oldconfig
49+
```
50+
51+
#### Opción 3: Ignorar archivos específicos
52+
Si no necesitas compilar estos archivos específicos, puedes filtrarlos:
53+
```bash
54+
# Editar tu script para excluir archivos problemáticos
55+
exclude_files = ['do_mounts_initrd.c', 'do_mounts_rd.c']
56+
```
57+
58+
### 2. Errores de tipo "dependency"
59+
60+
**Síntoma:**
61+
```
62+
fatal error: some_header.h: No such file or directory
63+
```
64+
65+
**Solución:**
66+
```bash
67+
# Verificar que el kernel esté completamente configurado
68+
cd /path/to/kernel/linux
69+
make prepare
70+
make scripts
71+
```
72+
73+
### 3. Errores de tipo "code"
74+
75+
**Síntoma:**
76+
```
77+
error: expected ';' before 'return'
78+
error: incompatible types when assigning
79+
```
80+
81+
**Causa:**
82+
Estos son errores reales en el código. Pueden ser:
83+
- Bug del autofix
84+
- Error preexistente en el kernel
85+
- Cambio que requiere ajustes adicionales
86+
87+
**Solución:**
88+
1. Revisar el diff del archivo modificado:
89+
```bash
90+
cd /path/to/kernel/linux/init
91+
diff -u file.c.bak file.c
92+
```
93+
94+
2. Si es un bug del autofix, reportarlo o deshabilitar la regla problemática en `engine.py`:
95+
```python
96+
# En engine.py, comentar la regla problemática:
97+
AUTO_FIX_RULES = {
98+
# "regla problemática": fix_function, # Deshabilitado por bug XYZ
99+
}
100+
```
101+
102+
### 4. Conflictos de sección `__initconst`
103+
104+
**Síntoma:**
105+
```
106+
error: 'initcall_level_names' causes a section type conflict with '__setup_str_set_debug_rodata'
107+
```
108+
109+
**Causa:**
110+
El compilador detecta que dos variables con diferentes cualificadores están en la misma sección. Esto suele ser un problema del kernel original, no del autofix.
111+
112+
**Solución:**
113+
Este error suele estar presente en el kernel original. Verificar:
114+
```bash
115+
# Compilar archivo sin modificaciones del autofix
116+
cd /path/to/kernel/linux
117+
git status init/main.c # Verificar si hay cambios
118+
git checkout init/main.c # Restaurar original
119+
make init/main.o # Si falla, es un bug del kernel original
120+
```
121+
122+
## 🛠️ Auto-configuración del Kernel
123+
124+
El sistema automáticamente ejecuta `make defconfig` si detecta que falta `.config`. Esto:
125+
126+
**Ventajas:**
127+
- Configuración rápida y automática
128+
- Permite compilar sin intervención manual
129+
- Configuración válida y consistente
130+
131+
**Limitaciones:**
132+
- `defconfig` solo habilita opciones básicas
133+
- Algunos archivos pueden requerir `CONFIG_*` específicos
134+
- No es equivalente a una configuración completa del sistema
135+
136+
## 📊 Interpretar el Reporte de Compilación
137+
138+
### Resumen en Consola
139+
```
140+
============================================================
141+
RESUMEN DE COMPILACIÓN
142+
============================================================
143+
Total de archivos: 10
144+
Compilados con éxito: 7 (70.0%)
145+
Fallidos: 3 (30.0%)
146+
Tiempo total: 23.04s
147+
Tiempo promedio: 2.30s
148+
============================================================
149+
150+
Clasificación de errores:
151+
• Config/Context (símbolos no declarados por CONFIG_*): 2
152+
• Desconocido: 1
153+
154+
Archivos con errores de compilación:
155+
✗ do_mounts_initrd.c [config]
156+
init/do_mounts_initrd.c:101:60: error: 'envp_init' undeclared...
157+
```
158+
159+
### Interpretación:
160+
- **70% de éxito** → El autofix no rompe la mayoría del código
161+
- **2 errores [config]** → Problemas de configuración, no bugs
162+
- **1 error [unknown]** → Requiere investigación manual
163+
164+
## 🔬 Verificación Avanzada
165+
166+
### Compilar archivo original sin modificaciones
167+
```bash
168+
cd /path/to/kernel/linux/init
169+
# Restaurar original
170+
cp file.c.bak file.c
171+
# Compilar
172+
cd /path/to/kernel/linux
173+
make init/file.o
174+
```
175+
176+
Si el original falla → **no es un bug del autofix**
177+
Si el original compila pero el modificado falla → **revisar el autofix**
178+
179+
### Inspeccionar diferencias
180+
```bash
181+
# Ver exactamente qué cambió
182+
diff -u init/file.c.bak init/file.c
183+
184+
# Ver con contexto coloreado
185+
git diff --no-index init/file.c.bak init/file.c
186+
```
187+
188+
### Probar fix individual
189+
```python
190+
# En Python
191+
from engine import apply_fixes
192+
193+
issues = [{"line": 100, "message": "WARNING: quoted string split across lines"}]
194+
results = apply_fixes("/path/to/file.c", issues)
195+
196+
for r in results:
197+
print(f"Line {r['line']}: {'' if r['fixed'] else ''} {r['message']}")
198+
```
199+
200+
## 📈 Mejores Prácticas
201+
202+
1. **Siempre revisar el reporte de clasificación** antes de asumir que hay un bug
203+
2. **Verificar archivos originales** antes de reportar problemas
204+
3. **Usar configuración completa del kernel** para mejor precisión
205+
4. **Filtrar archivos conflictivos** si no son críticos para tu análisis
206+
5. **Mantener backups** (el sistema los crea automáticamente como `.bak`)
207+
208+
## 🐛 Reportar Bugs
209+
210+
Si encuentras un error real del autofix, incluye:
211+
212+
1. **Clasificación del error** (output del sistema)
213+
2. **Diff del archivo** (`diff -u original.c modified.c`)
214+
3. **Regla que causó el error** (buscar en `engine.py`)
215+
4. **Contexto del código** (5-10 líneas antes/después)
216+
5. **Versión del kernel** (si es relevante)
217+
218+
## 🔄 Workflow Recomendado
219+
220+
```bash
221+
# 1. Analizar
222+
./run # o ./main.py --analyze ...
223+
224+
# 2. Revisar reporte de compilación
225+
cat html/compile.html # o consola
226+
227+
# 3. Si hay errores [config]:
228+
# a) Ignorar (son falsos positivos)
229+
# b) Configurar kernel manualmente
230+
# c) Filtrar archivos afectados
231+
232+
# 4. Si hay errores [code]:
233+
# → Investigar si es bug del autofix
234+
# → Revisar diff
235+
# → Deshabilitar regla si es necesario
236+
237+
# 5. Iterar
238+
# → Deshabilitar fixes problemáticos
239+
# → Re-ejecutar
240+
# → Verificar mejora en tasa de éxito
241+
```
242+
243+
## 📚 Referencias
244+
245+
- [Kernel Build System](https://www.kernel.org/doc/html/latest/kbuild/index.html)
246+
- [Kernel Configuration](https://www.kernel.org/doc/html/latest/admin-guide/README.html)
247+
- [ARCHITECTURE.md](ARCHITECTURE.md) - Arquitectura del sistema
248+
- [FIXES_STATUS.md](FIXES_STATUS.md) - Estado de reglas de autofix

0 commit comments

Comments
 (0)