日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

linux内核 机器码,u-boot与Linux内核机器码问题

發(fā)布時間:2023/11/27 生活经验 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux内核 机器码,u-boot与Linux内核机器码问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在<>一文中,執(zhí)行完第6步的操作后,啟動u-boot后,用bootm 命令來引導(dǎo)內(nèi)核(執(zhí)行bootm 0x30008000),但是執(zhí)行后,卡住了,無法啟動內(nèi)核,現(xiàn)象如下:

Starting kernel ...

Uncompressing Linux.............................................................

Error: unrecognized/unsupported machine ID (r1 = 0x000000c1).

Available machine support:

ID (hex)??????? NAME

000000a8??????? SMDK2440

從這里的提示信息可知,是u-boot的機(jī)器碼和linux的不相同造成的,u-boot是0x000000c1(193),內(nèi)核是 0x0000016A(362)。網(wǎng)上大多數(shù)都是修改的linux內(nèi)核的機(jī)器碼,在arch/arm/tools/mach-types.h中,讓它們一致,具體修改哪一方,我覺得要看情況而定。

我們先看u-boot的機(jī)器碼和linux的機(jī)器碼是在什么地方?jīng)Q定的(為了搞清這個問題,我找了一天時間,呵呵)。u-boot的機(jī)器碼是在u-boot的board/samsung/ok2440v3/ok2440v3.c文件里決定的:

/* arch number of SMDK2410-Board */

gd->bd->bi_arch_number = MACH_TYPE_SMDK2410;

查看u-boot/include/asm-arm/mach-types.h文件,有:

#define MACH_TYPE_SMDK2410??????? 193

#define MACH_TYPE_S3C2440??????? ?? 362

這就是我們上面看到r1 = 0x000000c1(193)的原因。

而linux的機(jī)器碼是由arch/arm/mach-s3c2440/mach-smdk2440.c下面的MACHINE_START(S3C2440, "SMDK2440")中的第一個參數(shù)S3C2440(關(guān)鍵字)決定的:

MACHINE_START(S3C2440, "SMDK2440")

/* Maintainer: Ben Dooks */

.phys_io?? ?= S3C2410_PA_UART,

.io_pg_offst?? ?= (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,

.boot_params?? ?= S3C2410_SDRAM_PA + 0x100,

.init_irq?? ?= s3c24xx_init_irq,

.map_io?? ??? ?= smdk2440_map_io,

.init_machine?? ?= smdk2440_machine_init,

.timer?? ??? ?= &s3c24xx_timer,

MACHINE_END

查看內(nèi)核目錄下的arch/arm/tools/mach-types.h文件,有:

smdk2410?? ??? ?ARCH_SMDK2410?? ??? ?SMDK2410?? ??? ?193

s3c2440?? ??? ?ARCH_S3C2440?? ??? ?S3C2440?? ??? ???????? 362

smdk2440?? ??? ?MACH_SMDK2440?? ??? ?SMDK2440?? ??? ?1008

關(guān)鍵字是s3c2440,所以我們上面看到的是0x000000a8(362)。

所以,我們這里不去修改內(nèi)核,而是直接修改u-boot 的 board/samsung/ok2440v3/ok2440v3.c文件,如下:

/* arch number of SMDK2410-Board */

gd->bd->bi_arch_number = MACH_TYPE_S3C2440;

重新編譯u-boot后,下載到nand中,完成<>一文中的第8步后,就可以手動成功引導(dǎo)內(nèi)核了。

總結(jié)

以上是生活随笔為你收集整理的linux内核 机器码,u-boot与Linux内核机器码问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。