加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

unrecognized/unsupported machine ID (r1 = 0x31f07d30).

发布时间:2020-12-15 06:50:18 所属栏目:百科 来源:网络整理
导读:? unrecognized/unsupported machine ID (r1 = 0x31f07d30). 分类: VC 2009-05-21 20:46 692人阅读 评论(0) 收藏 举报 移植2.6.17.13到s3c2410 移植2.6.17.13到s3c2410 前一阵子移植了u-boot1.1.4之后,移植2.6.17.13走了一些弯路,采用了别人移植的2.6.14
?

unrecognized/unsupported machine ID (r1 = 0x31f07d30).

分类: VC 692人阅读 评论(0) 收藏 举报

移植2.6.17.13到s3c2410

移植2.6.17.13到s3c2410

前一阵子移植了u-boot1.1.4之后,移植2.6.17.13走了一些弯路,采用了别人移植的2.6.14或2.6.11等方法都不成功,后来发现2.6.17比前几个版本的内核更容易。

从 www.kernel.org下载2.6.17.13.tar.bz2,解压:
#tar jxvf 2.6.17.13.tar.bz2

1、重新编译和修改u-boot
以前移植u-boot用的是arm-linux-gcc 2.95.3,到移植2.6内核的时候发现必须用gcc3.0以上的编译器,没办法只好下载了个arm-linux-gcc3.4.4 +glibc2.3.5,怕由于编译器不一致引起问题,重新编译了一次u-boot,没遇到任何错误。
2、修改内核顶层目录的Makefile,找到ARCH和CROSS_COMPILE的地方,修改为
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-
保存。
3、 修改arch/arm/mach-s3c2410/common-smdk.c
设置Nand Flash的分区和信息,下面是我的分区结构:
static struct mtd_partition smdk_default_nand_part[] = {
[0] = {
.name = "bootloader",
.size = SZ_1M,
.offset = 0,
},
[1] = {
.name = "kernel",
.offset = SZ_1M,
.size = SZ_2M,如果您是在公共场合使用计算机,离开时
[2] = {
.name = "root",
.offset = SZ_1M*3,
.size = SZ_8M*5,
[3] = {
.name = "user",
.offset = SZ_1M*43,
.size = SZ_1M*21,
};
static struct s3c2410_platform_nand smdk_nand_info = {
.tacls = 0,
.twrph0 = 30,
.twrph1 = 0,
.nr_sets = ARRAY_SIZE(smdk_nand_sets),
.sets = smdk_nand_sets,
};

说明:这里2.6.17的设置分区与其他版本如2.6.14或2.6.11有点区别,其他版本是修改
arch/arm/machs3c2410/devs.c

arch/arm/machs3c2410/machsmdk2410.
2.6.17.13设置这些文件无效。

4、禁止Flash ECC校验
内核都是通过u-boot写数据到Nand Flash的,u-boot通过的软件ECC算法产生ECC校验码,这与内核校验的ECC码不一样,内核中的ECC码是由S3C2410中Nand Flash控制器产生的. 所以,我们在这里选择禁止内核ECC校验。
修改drivers/mtd/nand/s3c2410.c 文件,找到s3c2410_nand_init_chip()函数,在该函数体最后加上一条语句:
chip->eccmode = NAND_ECC_NONE;
保存,退出。

5、支持启动时挂载devfs
为了我们的内核支持devfs以及在启动时并在/sbin/init运行之前能自动挂载/dev为devfs文件系统,修改fs/Kconfig文件,找到
menu "Pseudo filesystems"
添加如下语句:
config DEVFS_FS
bool "/dev file system support (OBSOLETE)"
default y
config DEVFS_MOUNT
bool "Automatically mount at boot"
default y
depends on DEVFS_FS
6、使用SMDK板子的config配置内核
#cp arch/arm/configs/smdk2410_defconfig .config
#make menuconfig
在smdk2410_defconfig的基础上,增加了下面选项:
Loadable module support >
  • Enable loadable module support
  • Automatic kernel module loading
    System Type -->
  • S3C2410 DMA support
    Boot options -->
    Default kernel command string:
    noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0,115200 mem=32M
    #说明:mtdblock2代表第3个flash分区,用来作根文件系统rootfs;
    # console=ttySAC0,115200使kernel启动期间的信息全部输出到串口0上,波特率为115200;
    # 2.6内核对于串口的命名改为ttySAC0,但这不影响用户空间的串口编程。
    # 用户空间的串口编程针对的仍是/dev/ttyS0等
    # mem=32M表示内存是32M,如果是64则设为64M
    Floating point emulation -->
  • NWFPE math emulation
    #This is necessary to run most binaries!!!

    #接下来要做的是对内核MTD子系统的设置
    Device Drivers -->
    Memory Technology Devices (MTD) -->
  • MTD partitioning support
    #支持MTD分区,这样我们在前面设置的分区才有意义
  • Command line partition table parsing
    #支持从命令行设置flash分区信息,灵活
    RAM/ROM/Flash chip drivers -->
    <*> Detect flash chips by Common Flash Interface (CFI) probe
    <*> Detect nonCFI AMD/JEDECcompatible flash chips
    <*> Support for Intel/Sharp flash chips
    <*> Support for AMD/Fujitsu flash chips
    <*> Support for ROM chips in bus mapping
    NAND Flash Device Drivers -->
    <*> NAND Device Support
    <*> NAND Flash support for S3C2410/S3C2440 SoC
    Character devices -->
  • Nonstandard serial port support
  • S3C2410 RTC Driver
    USB Support -->
    <*> Support for Host-side USB
    MMC/SD Card Support -->
    <*> MMC Support
    <*> MMC block device driver
    #接下来做的是针对文件系统的设置,本人实验时目标板上要上的文件系统是cramfs,故做如下配置
    File systems -->
    <> Second extended fs support #去除对ext2的支持
    Pseudo filesystems -->
  • /proc file system support
  • Virtual memory file system support (former shm fs)
  • /dev file system support (OBSOLETE)
  • Automatically mount at boot (NEW)
    #这里会看到我们前先修改fs/Kconfig的成果,devfs已经被支持上了
    Miscellaneous filesystems >
    <*> Compressed ROM file system support (cramfs)
    #支持cramfs
    Network File Systems >
    <*> NFS file system support
    保存退出,产生.config文件。

    7、编译内核,下载到板子上
    #make zImage
    生成zImage在arch/arm/boot/目录下

    zImage下载到板子上之后可以直接用go来执行,但是go启动内核的话会出现下面错误:
    random2410 # tftp 30008000 2.6.17.13
    TFTP from server 192.168.1.10; our IP address is 192.168.1.110
    Filename '2.6.17.13'.
    Load address: 0x30008000
    Loading: #################################################################
    #################################################################
    #################################################################
    ########################
    done
    Bytes transferred = 1118644 (1111b4 hex)

    random2410 # go 30008000
    ## Starting application at 0x30008000 ...
    Uncompressing Linux............................................................. Error: unrecognized/unsupported machine ID (r1 = 0x31f07d30). Available machine support: ID (hex) NAME 000000c1 SMDK2410 Please check your kernel config and/or bootloader. 产生的原因是go启动内核的话,u-boot不会传machiine ID给内核,因为go只是执行普通的应用程序,不考虑到传递参数给内核的问题,没有必要在乎它。如果只是想看看go能不能启动内核的话,修改方法有两个: a、修改u-boot的common/cmd_boot.c的do_go()函数: /*#if defined(CONFIG_I386)*/ <==注释掉 DECLARE_GLOBAL_DATA_PTR; /*#endif*/ <==注释掉 .... #if !defined(CONFIG_NIOS) /*******************add here*******************************/ if(argc==2) rc = ((ulong (*)(int,char *[]))addr) (0,gd->bd->bi_arch_number); else /*********************add end *****************************/ rc = ((ulong (*)(int,char *[]))addr) (--argc,&argv[1]); b、修改内核的arch/arm/kernel/head.S,直接将s3c2410的参数赋给内核 __INIT .type stext,%function ENTRY(stext) /****************add here*****************/ mov r0,#0 mov r1,#0xc1 ldr r2,=0x30000100 /***************end add******************/ msr cpsr_c,#PSR_F_BIT | PSR_I_BIT | MODE_SVC @ ensure svc mode @ and irqs disabled 8、用bootm启动内核 这个方法u-boot可以将machine ID传给内核,正常启动,不过用u-boot的mkimage工具(在u-boot1.1.4/tools/目录下)将前面生成的zImage加上一个信息头(有关如何添加头的命令和使用tftp在后面讲述),之后下载到板子上,启动控制台信息如下: U-Boot 1.1.4 (Sep 20 2006 - 00:34:30) U-Boot code: 31F80000 -> 31F9628C BSS: -> 31F9A578 RAM Configuration: Bank #0: 30000000 32 MB Flash: 512 kB *** Warning - bad CRC,using default environment In: serial Out: serial Err: serial random2410 # tftp 30008000 uImage2.6.17.13 TFTP from server 192.168.1.10; our IP address is 192.168.1.110 Filename 'uImage2.6.17.13'. Load address: 0x30008000 Loading: ################################################################# ################################################################# ################################################################# ######################## done Bytes transferred = 1116720 (110a30 hex) random2410 # bootm 30008000 ## Booting image at 30008000 ... Image Name: linux-2.6.17.13 Created: 2006-09-19 17:25:57 UTC Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 1116656 Bytes = 1.1 MB Load Address: 30008000 Entry Point: 30008040 Verifying Checksum ... OK XIP Kernel Image ... OK Starting kernel ... cleanup before linux... enter the Kerne....address is 30008040 transfer params to linux kernel: machine ID: r1=c1,boot params addr: r2=30000100 enter decompress_kernel... finished to arch_decomp_setup Uncompressing Linux......................................................................... done,booting the kernel. Linux version 2.6.17.13 (xzs@xzs-pc) (gcc version 3.4.4) #7 Wed Sep 20 01:23:13 CST 2006 CPU: ARM920Tid(wb) [41129200] revision 0 (ARMv4T) Machine: SMDK2410 Warning: bad configuration page,trying to continue Memory policy: ECC disabled,Data cache writeback CPU S3C2410A (id 0x32410002) S3C2410: core 202.800 MHz,memory 101.400 MHz,peripheral 50.700 MHz S3C2410 Clocks,(c) 2004 Simtec Electronics CLOCK: Slow mode (1.500 MHz),fast,MPLL on,UPLL on CPU0: D VIVT write-back cache CPU0: I cache: 16384 bytes,associativity 64,32 byte lines,8 sets CPU0: D cache: 16384 bytes,8 sets Built 1 zonelists Kernel command line: noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0,115200 mem=32M irq: clearing pending ext status 00000200 irq: clearing subpending status 00000002 PID hash table entries: 256 (order: 8,1024 bytes) timer tcon=00500000,tcnt a509,tcfg 00000200,00000000,usec 00001e4c Console: colour dummy device 80x30 Dentry cache hash table entries: 4096 (order: 2,16384 bytes) Inode-cache hash table entries: 2048 (order: 1,8192 bytes) Memory: 32MB = 32MB total Memory: 30080KB available (1856K code,404K data,92K init) Mount-cache hash table entries: 512 CPU: Testing write buffer coherency: ok NET: Registered protocol family 16 S3C2410: Initialising architecture usbcore: registered new driver usbfs usbcore: registered new driver hub NET: Registered protocol family 2 IP route cache hash table entries: 256 (order: -2,1024 bytes) TCP established hash table entries: 1024 (order: 0,4096 bytes) TCP bind hash table entries: 512 (order: -1,2048 bytes) TCP: Hash tables configured (established 1024 bind 512) TCP reno registered S3C2410 DMA Driver,(c) 2003-2004 Simtec Electronics DMA channel 0 at c2800000,irq 33 DMA channel 1 at c2800040,irq 34 DMA channel 2 at c2800080,irq 35 DMA channel 3 at c28000c0,irq 36 NetWinder Floating Point Emulator V0.97 (double precision) JFFS2 version 2.2. (NAND) (C) 2001-2003 Red Hat,Inc. io scheduler noop registered io scheduler anticipatory registered (default) io scheduler deadline registered io scheduler cfq registered Console: switching to colour frame buffer device 80x25 fb0: Virtual frame buffer device,using 1024K of video memory S3C2410 RTC,(c) 2004 Simtec Electronics s3c2410-uart.0: s3c2410_serial0 at MMIO 0x50000000 (irq = 70) is a S3C2410 s3c2410-uart.1: s3c2410_serial1 at MMIO 0x50004000 (irq = 73) is a S3C2410 s3c2410-uart.2: s3c2410_serial2 at MMIO 0x50008000 (irq = 76) is a S3C2410 RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize S3C24XX NAND Driver,(c) 2004 Simtec Electronics s3c2410-nand: Tacls=1,9ns Twrph0=4 39ns,Twrph1=1 9ns NAND device: Manufacturer ID: 0xec,Chip ID: 0x76 (Samsung NAND 64MiB 3,3V 8-bit) NAND_ECC_NONE selected by board driver. This is not recommended !! Scanning device for bad blocks Bad eraseblock 629 at 0x009d4000 Creating 4 MTD partitions on "NAND 64MiB 3,3V 8-bit": 0x00000000-0x00100000 : "bootloader" mtd: Giving out device 0 to bootloader 0x00100000-0x00300000 : "kernel" mtd: Giving out device 1 to kernel 0x00300000-0x02b00000 : "root" mtd: Giving out device 2 to root 0x02b00000-0x04000000 : "user" mtd: Giving out device 3 to user usbmon: debugfs is not available mice: PS/2 mouse device common for all mice ts: Compaq touchscreen protocol output TCP bic registered NET: Registered protocol family 1 Reading data from NAND FLASH without ECC is not recommended No filesystem could mount root,tried: cramfs romfs Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,2) 这里因为我没有添加任何应用程序和文件系统,所以出错,不影响内核已经成功移植。 9、使用mkimage给zImage添加信息头 mkimage -A arm -O linux -T kernel -C none -a 30008000 -e 30008040 -n linux-2.6.17.13 -d zImage uImage2.6.17.13 -A arm -------- 架构是arm -O linux -------- 操作系统是linux -T kernel -------- 类型是kernel -C none -------- 压缩类型为无压缩 -a 30008000 ---- image的载入地址(hex) -e 30008040 ---- 内核的入口地址(hex),因为信息头的大小是0x40 -n linux-2.6.17.13 --- image的名字 -d zImage ---- 无头信息的image文件名 uImage2.6.17.13 ---- 加了头信息之后的image文件名 10、使用tftp下载内核 a、安装atftpd 我现在用的linux是ubuntu6.06,安装了atftpd,没安装的话使用 #sudo apt-get install atftpd 安装。 b、接着建立/tftp目录,并设置所有人都有读写运行权限: #sudo mkdir /tftp #sudo chmod 777 tftp c、启动tftp服务: #sudo atftpd --daemon --user xzs --group root /tftp d、将zImage和uImage2.6.17.13复制到/tftp目录下 e、启动minicom,复位板子,在minicom下输入 tftp 30008000 uImage2.6.17.13 如果已经板子和PC机已经通过网线连接,IP也正确,则会出现一下信息: TFTP from server 192.168.1.10; our IP address is 192.168.1.110 Filename 'uImage2.6.17.13'. Load address: 0x30008000 Loading: ################################################################# ################################################################# ################################################################# ######################## done Bytes transferred = 1116720 (110a30 hex)
  • (编辑:李大同)

    【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

      推荐文章
        热点阅读