前言

  • 经过多次尝试,基于AT91SAM9261EK的Linux 内核终于启动了,内核版本先回退到了:​​Linux 2.6.39​​​,之所以回退这个版本,因为这个版本是​​linux-at91​​最老的分支

环境

  • arm gcc 的交叉编译器:​​gcc version 4.4.1 (Sourcery G++ Lite 2010q1-202)​
  • AT91Bootstrap 3.10.4
  • U-Boot 2015.01
  • Linux version 2.6.39
  • 编译主机:Ubuntu 20.04.4 LTS

搭建过程

  • 首先使用最新的 ​​gcc version 9.4.0​​​,无法编译较老的 Linux 2.6.39,因此使用 ​​2010q1-202​​​,这个arm gcc 工具链全称为:​​arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu​
  • 编译过程中遇到了两个问题

问题一

  • ​Can't use 'defined(@array)'​
  • 【解决方法】这个根据网上的提示,把这个​​defined ​​移除即可

【AT91SAM9261EK】 编译运行Linux Kernel 2.6.39_ide

diff --git a/kernel/timeconst.pl b/kernel/timeconst.pl
index eb51d76e058a..063fcc0b52fb 100644
--- a/kernel/timeconst.pl
+++ b/kernel/timeconst.pl
@@ -370,7 +370,7 @@ if ($hz eq '--can') {
}

@val = @{$canned_values{$hz}};
- if (!defined(@val)) {
+ if (!(@val)) {
@val = compute_values($hz);
}
output($hz, @val);

第二个问题:

  • ​drivers/video/atmel_lcdfb.c​​​ 中报:​​'struct atmel_lcdfb_info' has no member named 'bl_power'​
drivers/video/atmel_lcdfb.c: In function 'atmel_bl_update_status':
drivers/video/atmel_lcdfb.c:92: error: 'struct atmel_lcdfb_info' has no member named 'bl_power'
drivers/video/atmel_lcdfb.c:99: error: 'struct atmel_lcdfb_info' has no member named 'bl_power'
drivers/video/atmel_lcdfb.c:101: error: 'struct atmel_lcdfb_info' has no member named 'bl_power'
drivers/video/atmel_lcdfb.c:113: error: 'struct atmel_lcdfb_info' has no member named 'bl_power'
make[2]: *** [scripts/Makefile.build:284: drivers/video/atmel_lcdfb.o] Error 1
make[1]: *** [scripts/Makefile.build:419: drivers/video] Error 2
make: *** [Makefile:919: drivers] Error 2

【AT91SAM9261EK】 编译运行Linux Kernel 2.6.39_linux_02

  • 【解决方法】对比新的分支代码,如 ​​linux-3.4.9-at91​​,使用背光的【宏】,处理一下即可
diff --git a/drivers/video/atmel_lcdfb.c b/drivers/video/atmel_lcdfb.c
index 402cb24e49f3..554d85356ce8 100644
--- a/drivers/video/atmel_lcdfb.c
+++ b/drivers/video/atmel_lcdfb.c
@@ -9,6 +9,7 @@
*/

#include <linux/kernel.h>
+#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/interrupt.h>
#include <linux/backlight.h>
@@ -85,6 +86,7 @@ static void atmel_lcdfb_update_dma(struct fb_info *info,
atmel_lcdfb_update_dma2d(sinfo, var);
}

+#if defined(CONFIG_BACKLIGHT_ATMEL_LCDC)
/* some bl->props field just changed */
static int atmel_bl_update_status(struct backlight_device *bl)
{
@@ -122,11 +124,6 @@ static int atmel_bl_get_brightness(struct backlight_device *bl)
return lcdc_readl(sinfo, ATMEL_LCDC_CONTRAST_VAL);
}

-static const struct backlight_ops atmel_lcdc_bl_ops = {
- .update_status = atmel_bl_update_status,
- .get_brightness = atmel_bl_get_brightness,
-};
-
static void atmel_lcdfb_init_contrast(struct atmel_lcdfb_info *sinfo)
{
/* contrast pwm can be 'inverted' */
@@ -137,6 +134,24 @@ static void atmel_lcdfb_init_contrast(struct atmel_lcdfb_info *sinfo)
lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_CTR, contrast_ctr);
lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_VAL, ATMEL_LCDC_CVAL_DEFAULT);
}
+#else
+static int atmel_bl_update_status(struct backlight_device *bl)
+{
+ return 0;
+}
+
+static int atmel_bl_get_brightness(struct backlight_device *bl)
+{
+ return ATMEL_LCDC_CVAL_DEFAULT;
+}
+
+static void atmel_lcdfb_init_contrast(struct atmel_lcdfb_info *sinfo) {}
+#endif
+
+static const struct backlight_ops atmel_lcdc_bl_ops = {
+ .update_status = atmel_bl_update_status,
+ .get_brightness = atmel_bl_get_brightness,
+};

void atmel_lcdfb_start(struct atmel_lcdfb_info *sinfo)
{

【AT91SAM9261EK】 编译运行Linux Kernel 2.6.39_Image_03


【AT91SAM9261EK】 编译运行Linux Kernel 2.6.39_Image_04

编译命令

  • 这个Linux 2.6.39,比较的老,可以直接编译,不需要传入什么参数
make distclean    /* 清理一下工程 */
make ARCH=arm at91sam9261ek_defconfig /* ARCH=arm 需要的,除非Makefile中写死 */
make uImage ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- /* 编译uImage */

烧写

  • 编译成功后,生成的产物目录:​​arch/arm/boot/zImage​
OBJCOPY arch/arm/boot/zImage
Kernel: arch/arm/boot/zImage is ready
UIMAGE arch/arm/boot/uImage
Image Name: Linux-2.6.39+
Created: Mon May 2 00:27:32 2022
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1436876 Bytes = 1403.20 KiB = 1.37 MiB
Load Address: 20008000
Entry Point: 20008000
Image arch/arm/boot/uImage is ready
  • 烧写时,这里使用NandFlash启动,所以烧写到NandFlash中,注意其实地址为:​​0x20 0000​​,也就是偏移 2M 的地址
  • 可以把NandFlash 全部擦除,重新烧写 BootStrap、U-Boot、uImage

【AT91SAM9261EK】 编译运行Linux Kernel 2.6.39_linux_05

运行

  • 使用sam-ba 烧写完后,关闭 sam-ba,然后重启开发板,看到了Linux内核启动的信息了,因为没有根文件系统,所以最后会报错
RomBOOT


AT91Bootstrap 3.10.4-00001-g4a8de59c (2022-04-27 00:21:44)

NAND: ONFI not supported
NAND: Manufacturer ID: 0xec Chip ID: 0xf1
NAND: Disable On-Die ECC
NAND: Press the recovery button (BP4) to recovery
NAND: Using Software ECC
NAND: Image: Copy 0xa0000 bytes from 0x40000 to 0x21f00000
NAND: Done to load image


U-Boot 2015.01-linux4sam_5.2-00004-g0bb01949e9 (May 01 2022 - 23:13:53)

CPU: AT91SAM9261
Crystal frequency: 18.432 MHz
CPU clock : 198.656 MHz
Master clock : 99.328 MHz
DRAM: 64 MiB
WARNING: Caches not enabled
NAND: 128 MiB
*** Warning - bad CRC, using default environment

In: serial
Out: serial
Err: serial
Net: dm9000
Error: dm9000 address not set.

dm9000 i/o: 0x30000000, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 00:00:00:00:00:00
WARNING: Bad MAC address (uninitialized EEPROM?)
could not establish link
Hit any key to stop autoboot: 0

NAND read: device 0 offset 0x200000, size 0x300000
3145728 bytes read: OK
## Booting kernel from Legacy Image at 22000000 ...
Image Name: Linux-2.6.39+
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1436876 Bytes = 1.4 MiB
Load Address: 20008000
Entry Point: 20008000
Verifying Checksum ... OK
Loading Kernel Image ... OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.
Linux version 2.6.39+ (root@pluto-os) (gcc version 4.4.1 (Sourcery G++ Lite 2010q1-202) ) #2 Mon May 2 00:26:41 CST 2022
CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00053177
CPU: VIVT data cache, VIVT instruction cache
Machine: Atmel AT91SAM9261-EK
Memory policy: ECC disabled, Data cache writeback
Clocks: CPU 198 MHz, master 99 MHz, main 18.432 MHz
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 16256
Kernel command line: console=ttyS0,115200 earlyprintk mtdparts=atmel_nand:256k(bootstrap)ro,512k(uboot)ro,256k(env),256k(env_redundant),256k(spare),512k(dtb),6M(kernel)ro,-(rootfs) root=/dev/mtdblock7 rw rootfstype=jffs2
PID hash table entries: 256 (order: -2, 1024 bytes)
Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
Memory: 64MB = 64MB total
Memory: 61952k/61952k available, 3584k reserved, 0K highmem
Virtual kernel memory layout:
vector : 0xffff0000 - 0xffff1000 ( 4 kB)
fixmap : 0xfff00000 - 0xfffe0000 ( 896 kB)
DMA : 0xffc00000 - 0xffe00000 ( 2 MB)
vmalloc : 0xc4800000 - 0xfee00000 ( 934 MB)
lowmem : 0xc0000000 - 0xc4000000 ( 64 MB)
modules : 0xbf000000 - 0xc0000000 ( 16 MB)
.init : 0xc0008000 - 0xc0025000 ( 116 kB)
.text : 0xc0025000 - 0xc02b2000 (2612 kB)
.data : 0xc02b2000 - 0xc02d1540 ( 126 kB)
NR_IRQS:192
AT91: 96 gpio irqs in 3 banks
Console: colour dummy device 80x30
console [ttyS0] enabled
Calibrating delay loop... 98.71 BogoMIPS (lpj=493568)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
NET: Registered protocol family 16
AT91: Power Management
AT91: Starting after user reset
bio: create slab <bio-0> at 0
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
i2c-gpio i2c-gpio: using pins 39 (SDA) and 40 (SCL)
Switching to clocksource pit
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 2048 (order: 2, 16384 bytes)
TCP bind hash table entries: 2048 (order: 1, 8192 bytes)
TCP: Hash tables configured (established 2048 bind 2048)
TCP reno registered
UDP hash table entries: 256 (order: 0, 4096 bytes)
UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
NET: Registered protocol family 1
NetWinder Floating Point Emulator V0.97 (double precision)
msgmni has been set to 121
io scheduler noop registered (default)
atmel_lcdfb atmel_lcdfb.0: clut resources unusable
atmel_usart.0: ttyS0 at MMIO 0xfefff200 (irq = 1) is a ATMEL_SERIAL
brd: module loaded
atmel_nand atmel_nand: No DMA support for NAND access.
NAND device: Manufacturer ID: 0xec, Chip ID: 0xf1 (Samsung NAND 128MiB 3,3V 8-bit)
Scanning device for bad blocks
Bad eraseblock 446 at 0x0000037c0000
Bad eraseblock 994 at 0x000007c40000
8 cmdlinepart partitions found on MTD device atmel_nand
Creating 8 MTD partitions on "atmel_nand":
0x000000000000-0x000000040000 : "bootstrap"
0x000000040000-0x0000000c0000 : "uboot"
0x0000000c0000-0x000000100000 : "env"
0x000000100000-0x000000140000 : "env_redundant"
0x000000140000-0x000000180000 : "spare"
0x000000180000-0x000000200000 : "dtb"
0x000000200000-0x000000800000 : "kernel"
0x000000800000-0x000008000000 : "rootfs"
atmel_spi atmel_spi.0: Atmel SPI Controller at 0xfffc8000 (irq 12)
dm9000 Ethernet Driver, V1.31
dm9000 dm9000.0: eth%d: Invalid ethernet MAC address. Please set using ifconfig
dm9000 dm9000.0: eth0: Features changed: 0x00004802 -> 0x00004002
eth0: dm9000a at c4814000,c481e044 IRQ 107 MAC: 12:f3:db:e5:d2:ac (random)
usbmon: debugfs is not available
ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
at91_ohci at91_ohci: AT91 OHCI
at91_ohci at91_ohci: new USB bus registered, assigned bus number 1
at91_ohci at91_ohci: irq 20, io mem 0x00500000
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 2 ports detected
Initializing USB Mass Storage driver...
usbcore: registered new interface driver usb-storage
USB Mass Storage support registered.
udc: at91_udc version 3 May 2006
mousedev: PS/2 mouse device common for all mice
input: gpio-keys as /devices/platform/gpio-keys/input/input0
ads7846 spi0.2: touchscreen, irq 29
kernel BUG at arch/arm/mm/dma-mapping.c:451!
Unable to handle kernel NULL pointer dereference at virtual address 00000000
pgd = c0004000
[00000000] *pgd=00000000
Internal error: Oops: 805 [#1]
last sysfs file:
Modules linked in:
CPU: 0 Not tainted (2.6.39+ #2)
PC is at __bug+0x24/0x30
LR is at console_unlock+0x170/0x188
pc : [<c002dfd4>] lr : [<c003bf64>] psr: 60000093
sp : c381bcdc ip : c381bc28 fp : c381bce8
r10: 00000000 r9 : c396b000 r8 : c3973c7c
r7 : c3973c28 r6 : c3973c08 r5 : c3960a00 r4 : c3973c7c
r3 : 00000000 r2 : c02b943c r1 : c02b9464 r0 : 00000033
Flags: nZCv IRQs off FIQs on Mode SVC_32 ISA ARM Segment kernel
Control: 0005317f Table: 20004000 DAC: 00000017
Process swapper (pid: 1, stack limit = 0xc381a260)
Stack: (0xc381bcdc to 0xc381c000)
bcc0: c381bcf8
bce0: c381bcec c002f708 c002dfc0 c381bd0c c381bcfc c01629b4 c002f6dc c3960ae8
bd00: c381bd30 c381bd10 c01630fc c0162998 c395ae60 00000000 0000000c c02bb438
bd20: 00000000 c381bd60 c381bd34 c0067910 c0162fa0 c02b9420 c02bb438 00000000
bd40: 0000000c 00000002 c381bdf8 c396b000 c3815d60 c381bd74 c381bd64 c0067aa0
bd60: c00678ec c02bb438 c381bd88 c381bd78 c0069bc0 c0067a80 0000000c c381bda0
bd80: c381bd8c c0025078 c0069b1c ffffffff fefff000 c381be24 c381bda4 c002b188
bda0: c0025010 c381be00 00000000 c381be3c 40000013 7fffffff c381be38 c381a000
bdc0: 00000002 c381bdf8 c396b000 c3815d60 c381be24 00000000 c381bdec c0219c88
bde0: c0219d00 40000013 ffffffff 00000001 c3815d60 c00367c8 c381be3c c381be3c
be00: c3973c08 00000000 00000000 c391c6a0 c3960a00 c396b3e4 c381be34 c381be28
be20: c0219e4c c0219c44 c381be64 c381be38 c016213c c0219e44 00000000 c381bdf8
be40: c381bdf8 c396b000 c02b8cb4 c3973c00 c391c6a0 c3973c08 c381be74 c381be68
be60: c0162184 c01620c0 c381bebc c381be78 c0219304 c0162180 c02947db c396b000
be80: c396b2e4 00000000 c02cd144 c395a860 c396f000 c391c6a0 c391c6a0 c02cd144
bea0: c02cd144 00000000 00000000 00000000 c381becc c381bec0 c0161c1c c021881c
bec0: c381beec c381bed0 c013d7e8 c0161c0c c391c6a0 c391c6d4 c02cd144 00000000
bee0: c381bf08 c381bef0 c013d908 c013d740 c02cd144 c013d8a0 00000000 c381bf2c
bf00: c381bf0c c013cfe4 c013d8b0 c3830838 c39588d0 c02cd144 c3972bc0 c02c9640
bf20: c381bf3c c381bf30 c013d624 c013cfa0 c381bf68 c381bf40 c013c8cc c013d614
bf40: c02947db c02cd144 c001bf70 00000000 00000013 00000000 00000000 c381bf8c
bf60: c381bf6c c013df5c c013c834 c0021198 c001bf70 00000000 00000013 00000000
bf80: c381bf9c c381bf90 c01628bc c013debc c381bfac c381bfa0 c001bf84 c0162880
bfa0: c381bfe0 c381bfb0 c0025408 c001bf80 000000bf c00083c8 c003e794 c0021198
bfc0: c00083c8 c003e794 00000013 00000000 00000000 c381bff4 c381bfe4 c000845c
bfe0: c0025374 00000000 00000000 c381bff8 c003e794 c00083d8 00000000 00000000
Backtrace:
[<c002dfb0>] (__bug+0x0/0x30) from [<c002f708>] (___dma_single_dev_to_cpu+0x3c/0x64)
[<c002f6cc>] (___dma_single_dev_to_cpu+0x0/0x64) from [<c01629b4>] (atmel_spi_dma_unmap_xfer+0x2c/0x4c)
[<c0162988>] (atmel_spi_dma_unmap_xfer+0x0/0x4c) from [<c01630fc>] (atmel_spi_interrupt+0x16c/0x208)
r4:c3960ae8
[<c0162f90>] (atmel_spi_interrupt+0x0/0x208) from [<c0067910>] (handle_irq_event_percpu+0x34/0x194)
r8:00000000 r7:c02bb438 r6:0000000c r5:00000000 r4:c395ae60
[<c00678dc>] (handle_irq_event_percpu+0x0/0x194) from [<c0067aa0>] (handle_irq_event+0x30/0x40)
[<c0067a70>] (handle_irq_event+0x0/0x40) from [<c0069bc0>] (handle_level_irq+0xb4/0xdc)
r4:c02bb438
[<c0069b0c>] (handle_level_irq+0x0/0xdc) from [<c0025078>] (asm_do_IRQ+0x78/0xa8)
r4:0000000c
[<c0025000>] (asm_do_IRQ+0x0/0xa8) from [<c002b188>] (__irq_svc+0x28/0x60)
Exception stack(0xc381bda4 to 0xc381bdec)
bda0: c381be00 00000000 c381be3c 40000013 7fffffff c381be38 c381a000
bdc0: 00000002 c381bdf8 c396b000 c3815d60 c381be24 00000000 c381bdec c0219c88
bde0: c0219d00 40000013 ffffffff
r5:fefff000 r4:ffffffff
[<c0219c34>] (wait_for_common+0x0/0x170) from [<c0219e4c>] (wait_for_completion+0x18/0x1c)
[<c0219e34>] (wait_for_completion+0x0/0x1c) from [<c016213c>] (__spi_sync+0x8c/0xa8)
[<c01620b0>] (__spi_sync+0x0/0xa8) from [<c0162184>] (spi_sync+0x14/0x18)
r8:c3973c08 r7:c391c6a0 r6:c3973c00 r5:c02b8cb4 r4:c396b000
[<c0162170>] (spi_sync+0x0/0x18) from [<c0219304>] (ads7846_probe+0xaf8/0xc20)
[<c021880c>] (ads7846_probe+0x0/0xc20) from [<c0161c1c>] (spi_drv_probe+0x20/0x24)
[<c0161bfc>] (spi_drv_probe+0x0/0x24) from [<c013d7e8>] (driver_probe_device+0xb8/0x170)
[<c013d730>] (driver_probe_device+0x0/0x170) from [<c013d908>] (__driver_attach+0x68/0x8c)
r7:00000000 r6:c02cd144 r5:c391c6d4 r4:c391c6a0
[<c013d8a0>] (__driver_attach+0x0/0x8c) from [<c013cfe4>] (bus_for_each_dev+0x54/0x84)
r6:00000000 r5:c013d8a0 r4:c02cd144
[<c013cf90>] (bus_for_each_dev+0x0/0x84) from [<c013d624>] (driver_attach+0x20/0x28)
r6:c02c9640 r5:c3972bc0 r4:c02cd144
[<c013d604>] (driver_attach+0x0/0x28) from [<c013c8cc>] (bus_add_driver+0xa8/0x21c)
[<c013c824>] (bus_add_driver+0x0/0x21c) from [<c013df5c>] (driver_register+0xb0/0x140)
[<c013deac>] (driver_register+0x0/0x140) from [<c01628bc>] (spi_register_driver+0x4c/0x60)
r8:00000000 r7:00000013 r6:00000000 r5:c001bf70 r4:c0021198
[<c0162870>] (spi_register_driver+0x0/0x60) from [<c001bf84>] (ads7846_init+0x14/0x1c)
[<c001bf70>] (ads7846_init+0x0/0x1c) from [<c0025408>] (do_one_initcall+0xa4/0x17c)
[<c0025364>] (do_one_initcall+0x0/0x17c) from [<c000845c>] (kernel_init+0x94/0x144)
r9:00000000 r8:00000000 r7:00000013 r6:c003e794 r5:c00083c8
r4:c0021198
[<c00083c8>] (kernel_init+0x0/0x144) from [<c003e794>] (do_exit+0x0/0x660)
r4:00000000
Code: e59f0010 e1a01003 eb07ae9c e3a03000 (e5833000)
---[ end trace c751bc77ee2ec16a ]---
Kernel panic - not syncing: Fatal exception in interrupt
Backtrace:
[<c002e178>] (dump_backtrace+0x0/0x110) from [<c02198bc>] (dump_stack+0x18/0x1c)
r6:c381a260 r5:c3815d60 r4:c02d1918
[<c02198a4>] (dump_stack+0x0/0x1c) from [<c021991c>] (panic+0x5c/0x184)
[<c02198c0>] (panic+0x0/0x184) from [<c002e5b0>] (die+0x190/0x1d4)
r3:00010000 r2:c381bb4c r1:00002a5d r0:c027b2dd
r7:00000000
[<c002e420>] (die+0x0/0x1d4) from [<c002ff98>] (__do_kernel_fault+0x6c/0x8c)
r8:00000000 r7:c381bc94 r6:00000000 r5:00000805 r4:00000000
[<c002ff2c>] (__do_kernel_fault+0x0/0x8c) from [<c0030178>] (do_page_fault+0x1c0/0x1d8)
r8:00000805 r7:00000000 r6:c381bc94 r5:c3815d60 r4:00000000
[<c002ffb8>] (do_page_fault+0x0/0x1d8) from [<c0030228>] (do_translation_fault+0x24/0xac)
[<c0030204>] (do_translation_fault+0x0/0xac) from [<c00252d4>] (do_DataAbort+0x3c/0xa0)
r7:c381bc94 r6:00000000 r5:c02b6f90 r4:00000805
[<c0025298>] (do_DataAbort+0x0/0xa0) from [<c002b140>] (__dabt_svc+0x40/0x60)
Exception stack(0xc381bc94 to 0xc381bcdc)
bc80: 00000033 c02b9464 c02b943c
bca0: 00000000 c3973c7c c3960a00 c3973c08 c3973c28 c3973c7c c396b000 00000000
bcc0: c381bce8 c381bc28 c381bcdc c003bf64 c002dfd4 60000093 ffffffff
r7:c3973c28 r6:c3973c08 r5:c381bcc8 r4:ffffffff
[<c002dfb0>] (__bug+0x0/0x30) from [<c002f708>] (___dma_single_dev_to_cpu+0x3c/0x64)
[<c002f6cc>] (___dma_single_dev_to_cpu+0x0/0x64) from [<c01629b4>] (atmel_spi_dma_unmap_xfer+0x2c/0x4c)
[<c0162988>] (atmel_spi_dma_unmap_xfer+0x0/0x4c) from [<c01630fc>] (atmel_spi_interrupt+0x16c/0x208)
r4:c3960ae8
[<c0162f90>] (atmel_spi_interrupt+0x0/0x208) from [<c0067910>] (handle_irq_event_percpu+0x34/0x194)
r8:00000000 r7:c02bb438 r6:0000000c r5:00000000 r4:c395ae60
[<c00678dc>] (handle_irq_event_percpu+0x0/0x194) from [<c0067aa0>] (handle_irq_event+0x30/0x40)
[<c0067a70>] (handle_irq_event+0x0/0x40) from [<c0069bc0>] (handle_level_irq+0xb4/0xdc)
r4:c02bb438
[<c0069b0c>] (handle_level_irq+0x0/0xdc) from [<c0025078>] (asm_do_IRQ+0x78/0xa8)
r4:0000000c
[<c0025000>] (asm_do_IRQ+0x0/0xa8) from [<c002b188>] (__irq_svc+0x28/0x60)
Exception stack(0xc381bda4 to 0xc381bdec)
bda0: c381be00 00000000 c381be3c 40000013 7fffffff c381be38 c381a000
bdc0: 00000002 c381bdf8 c396b000 c3815d60 c381be24 00000000 c381bdec c0219c88
bde0: c0219d00 40000013 ffffffff
r5:fefff000 r4:ffffffff
[<c0219c34>] (wait_for_common+0x0/0x170) from [<c0219e4c>] (wait_for_completion+0x18/0x1c)
[<c0219e34>] (wait_for_completion+0x0/0x1c) from [<c016213c>] (__spi_sync+0x8c/0xa8)
[<c01620b0>] (__spi_sync+0x0/0xa8) from [<c0162184>] (spi_sync+0x14/0x18)
r8:c3973c08 r7:c391c6a0 r6:c3973c00 r5:c02b8cb4 r4:c396b000
[<c0162170>] (spi_sync+0x0/0x18) from [<c0219304>] (ads7846_probe+0xaf8/0xc20)
[<c021880c>] (ads7846_probe+0x0/0xc20) from [<c0161c1c>] (spi_drv_probe+0x20/0x24)
[<c0161bfc>] (spi_drv_probe+0x0/0x24) from [<c013d7e8>] (driver_probe_device+0xb8/0x170)
[<c013d730>] (driver_probe_device+0x0/0x170) from [<c013d908>] (__driver_attach+0x68/0x8c)
r7:00000000 r6:c02cd144 r5:c391c6d4 r4:c391c6a0
[<c013d8a0>] (__driver_attach+0x0/0x8c) from [<c013cfe4>] (bus_for_each_dev+0x54/0x84)
r6:00000000 r5:c013d8a0 r4:c02cd144
[<c013cf90>] (bus_for_each_dev+0x0/0x84) from [<c013d624>] (driver_attach+0x20/0x28)
r6:c02c9640 r5:c3972bc0 r4:c02cd144
[<c013d604>] (driver_attach+0x0/0x28) from [<c013c8cc>] (bus_add_driver+0xa8/0x21c)
[<c013c824>] (bus_add_driver+0x0/0x21c) from [<c013df5c>] (driver_register+0xb0/0x140)
[<c013deac>] (driver_register+0x0/0x140) from [<c01628bc>] (spi_register_driver+0x4c/0x60)
r8:00000000 r7:00000013 r6:00000000 r5:c001bf70 r4:c0021198
[<c0162870>] (spi_register_driver+0x0/0x60) from [<c001bf84>] (ads7846_init+0x14/0x1c)
[<c001bf70>] (ads7846_init+0x0/0x1c) from [<c0025408>] (do_one_initcall+0xa4/0x17c)
[<c0025364>] (do_one_initcall+0x0/0x17c) from [<c000845c>] (kernel_init+0x94/0x144)
r9:00000000 r8:00000000 r7:00000013 r6:c003e794 r5:c00083c8
r4:c0021198
[<c00083c8>] (kernel_init+0x0/0x144) from [<c003e794>] (do_exit+0x0/0x660)
r4:00000000

【AT91SAM9261EK】 编译运行Linux Kernel 2.6.39_Image_06


【AT91SAM9261EK】 编译运行Linux Kernel 2.6.39_Image_07

小结

  • U-boot 的版本,需要跟 Linux内核的版本配合好,才能正常的引导,后面继续验证新版本的Linux内核启动问题
  • 先搭建好开发的环境,再深入学习【嵌入式Linux】的完整开发