在arch/arm/boot/compressed/misc.c文件: 307 arch_decomp_setup(); 308 309 makecrc(); 310 *((volatile unsigned long *)0x40E00054) &= (~(3<<28)); //ABING GPAF0_L 311 *((volatile unsigned long *)0x40E0001C) = (1<<14); //ABING GPDR0 312 *((volatile unsigned long *)0x40E00024) = (1<<14); //ABING GPCR0 313 putstr("Uncompressing Linux..."); 314 *((volatile unsigned long *)0x40E00018) = (1<<14); //ABING GPSR0 315 gunzip(); 316 *((volatile unsigned long *)0x40E00024) = (1<<14); //ABING GPCR0 317 putstr(" done, booting the kernel.\n"); 318 return output_ptr; 参考include/asm-arm/arch-pxa/uncompress.h文件访问串口的代码: #define ((volatile unsigned long *)0x40100000) #define ((volatile unsigned long *)0x40200000) #define ((volatile unsigned long *)0x40700000) #define static void (char ) { while (!([5] & 0x20)); [0] = ; } /* * This does not append a newline */ static void (const char *) { while (*) { (*); if (* == '\n') ('\r'); ++; } } 可以这样定义: #define __raw_readl(a) (*(volatile unsigned int *)(a)) #define __raw_writel(v,a) (*(volatile unsigned int *)(a) = (v)) #define __raw_readw(a) (*(volatile unsigned short *)(a)) #define __raw_writew(v,a) (*(volatile unsigned short *)(a) = (v)) |