ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

ZYNQ芯片直接通过FSBL添加程序启动Linux内核zImage

2022-06-05 11:32:52  阅读:189  来源: 互联网

标签:printf 添加程序 zImage fsbl ZYNQ rc DEBUG fil SD


当前编译好FDT fdt.dtb和zImage放在SD卡中,使用XSDK建立fsbl工程,在sd.c中添加函数:

 1 u32 SDLoadImage(char *filename, u32 DestinationAddress)
 2 {
 3     FRESULT rc;
 4     UINT br;
 5     UINT bl;
 6     TCHAR *path = "0:/"; /* Logical drive number is 0 */
 7 
 8     f_close(&fil);
 9 
10     rc = f_mount(&fatfs, path, 0);
11     fsbl_printf(DEBUG_INFO,"SD: rc= %.8x\n\r", rc);
12 
13     if (rc != FR_OK) {
14         return XST_FAILURE;
15     }
16 
17     strcpy_rom(buffer, filename);
18     boot_file = (char *)buffer;
19 
20     rc = f_open(&fil, boot_file, FA_READ);
21     if (rc) {
22         fsbl_printf(DEBUG_GENERAL,"SD: Unable to open file %s: %d\n", boot_file, rc);
23         return XST_FAILURE;
24     }
25 
26     bl = (&fil)->fsize;
27 
28     rc = f_lseek(&fil, 0L);
29     if (rc) {
30         return XST_FAILURE;
31     }
32 
33     rc = f_read(&fil, (void*)DestinationAddress, bl, &br);
34 
35     if (rc) {
36         fsbl_printf(DEBUG_GENERAL,"*** ERROR: f_read returned %d\r\n", rc);
37     }
38 
39     f_close(&fil);
40 
41     return XST_SUCCESS;
42 }

在main函数中添加启动内核代码:

 1 const int32_t devicetree_addr = 0x20000000;
 2 const int32_t zimage_entry = 0x10008000;
 3 
 4 /* Loading Devicetree and zImage */
 5 fsbl_printf(DEBUG_INFO,"Loading fdt.dtb\r\n");
 6 Status = SDLoadImage("fdt.dtb", devicetree_addr);
 7 if (Status != XST_SUCCESS) {
 8     fsbl_printf(DEBUG_GENERAL,"SD_INIT_FAIL\r\n");
 9     OutputStatus(SD_INIT_FAIL);
10     FsblFallback();
11 }
12 
13 fsbl_printf(DEBUG_INFO,"Loading Kernel Image\r\n");
14 Status = SDLoadImage("zImage", zimage_entry);
15 if (Status != XST_SUCCESS) {
16     fsbl_printf(DEBUG_GENERAL,"SD_INIT_FAIL\r\n");
17     OutputStatus(SD_INIT_FAIL);
18     FsblFallback();
19 }
20 
21 void (*kernel_entry)(int zero, int arch, int params);
22 kernel_entry = (void (*)(int, int, int))zimage_entry;
23 
24 fsbl_printf(DEBUG_INFO,"Starting Kernel ...\r\n\n");
25 kernel_entry(0x0, 0x0, devicetree_addr);

 即可从SD加载Image并启动Linux系统。

 

标签:printf,添加程序,zImage,fsbl,ZYNQ,rc,DEBUG,fil,SD
来源: https://www.cnblogs.com/lyuyangly/p/16343602.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有