日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

linux内核分析与移植,内核分析移植

發布時間:2023/12/4 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux内核分析与移植,内核分析移植 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.make?menuconfig

添加對s3c2440的支持

system??type-->?s3c2440?machine-->?smdk2440

2.??__lookup_machine_type

處理uboot傳來的?machine?id?獲得一個?表示該id的?machine_desc?結構體

smdk2440的?machin_desc??結構體的定義如下/arch/arm/mach-s3c2440/mach-smdk2440.c

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

3.?setup_arch函數

函數的目的?處理uboot傳來的tag?參數

__lookup_machine_type??????????獲取machine_desc-->boot_params

parse_tags(tags?)??????????????根據獲得的?boot_params?對tags????初步處理

__tagtable(ATAG_MEM,?parse_tag_mem32);?內存參數處理函數的定義

在全局結構變量meninfo結構中增加內存的描述

__tagtable(ATAG_CMDLINE,?parse_tag_cmdline);命令行參數(bootargs)處理函數的定義

將命令行字符串拷貝為?default_command_line

parse_cmdline(cmdline_p,?from);??進一步處理?default_command_line

__early_param("mem=",?early_mem);????當bootargs里有?men=xxx?時執行early_men函數?進行處理

__early_param("initrd=",?early_initrd);?當bootargs里有?initrd=xxx?時執行early_initrd函數進行處理

paging_init(&meminfo,?mdesc);??對上邊的?meninfo結構處理

-->?devicemaps_init(mdesc);

-->(mdesc->map_io())??這里的mdesc就是上邊的?machine_desc?結構體

map_o??就是smdk2440_machine_init()

smdk2440_machine_init()代碼如下??該函數主要用于?設置外部晶振12000000

該函數在mach_smdk2440.c中定義

static?void?__init?smdk2440_map_io(void)

{

s3c24xx_init_io(smdk2440_iodesc,?ARRAY_SIZE(smdk2440_iodesc));

s3c24xx_init_clocks(16934400);

s3c24xx_init_uarts(smdk2440_uartcfgs,?ARRAY_SIZE(smdk2440_uartcfgs));

}

4.parse_args()

setup_arch()函數并沒有全部處理完tag參數?比如?ttySAC0=?XXX

這個函數會繼續處理?并對已處理的參數進一步處理

5.console_init()

該函數依次調用?__con_initcall_start?與?__con_initcall_end之間定義的每個函數

這些函數用宏?console_initcall(?fn?)定義??例如console_initcall(s3c24xx_serial_initconsole)

s3c24xx_serial_initconsol函數在/dev/serial/s3c2410.c中定義

-->register_console(&s3c24xx_serial_console);??//向內核注冊控制臺

s3c24xx_serial_console?為一個結構體

6.修改MTD分區

MTD---內存技術設備

7.驅動對設備的識別

內核確定設備的信息?加載驅動時將驅動程序與設備信息比較

如果驅動和某個設備匹配?則通過該驅動操作這個設備

內核里設備的信息用?結構體表示

設備???????struct?platform_device?{

const?char?*?name;

u32??id;

struct?device?dev;

u32??num_resources;

struct?resource?*?resource;

};

驅動????????struct?platform_driver?{

int?(*probe)(struct?platform_device?*);

int?(*remove)(struct?platform_device?*);

void?(*shutdown)(struct?platform_device?*);

int?(*suspend)(struct?platform_device?*,?pm_message_t?state);

int?(*suspend_late)(struct?platform_device?*,?pm_message_t?state);

int?(*resume_early)(struct?platform_device?*);

int?(*resume)(struct?platform_device?*);

struct?device_driver?driver;

};

10.?默認的arm的mtd的分區在arch/arm/plat-s3c24xx/common-smdk.c文件中的smdk_default_nand_part結構體里

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的linux内核分析与移植,内核分析移植的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。