Use XIP with CMake and Linker Scripts

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 
已解决

Use XIP with CMake and Linker Scripts

跳至解决方案
1,020 次查看
Geiger8759
Contributor III

Hi all, 

We have an exiqting project which we compiled with MCUXpresso and now we want to migrate to a CMake build in order to do some CICD on our servers.

I've got everything compiling and linking, but the code fails when flashed to the board when doing flash operations, it seems to be related to flexspi_nor_flash operations and I have a suspicion that the XIP is not correctly configured.

These are our link options:

target_link_options(${EXECUTABLE} PRIVATE
  -mcpu=cortex-m7
  -mfpu=fpv5-d16
  -mfloat-abi=hard 
  -mthumb
  -nostdlib
  -Wl,--undefined=FreeRTOSDebugConfig,-Map=${EXECUTABLE_OUTPUT_PATH}/${PROJECT_NAME}.map,--sort-section=alignment,--gc-sections
  -Wl,--cref
  -Xlinker -print-memory-usage -Xlinker
  -v
  -L "${CMAKE_SOURCE_DIR}/ld"
  -T "${LINKER_FILE}"
)

 
With the ld folder containing the linker files as generated by MCUXpresso, and the linker file being project_name_Debug.ld. 

FYI: We have extra linker script input sections configured in MCUXpresso using the project settings in the IDE, which generates the linkscripts folder.  But as I understand it, these are used to generate the .ld files so this should not be the issue. (I can also see the sections in the ld file).

The reason I suspect I'm doing something wrong with XIP, is because I include the xip-directory & source files in the build, but I fail to see how they are used or referenced in the code or linker file.

Can someone clarify this for me?
Any ideas?

xip folder contains:
- fsl_flexspi_nor_boot.c & .h
- evkmimxrt1064_flexspi_nor_config.c & .h

Thanks in advance!

0 项奖励
回复
1 解答
976 次查看
Geiger8759
Contributor III

Hi @kerryzhou ,

Thank you for the information.

I resolved the issue. 
The problem was that the generated linker file (ld file generated by MCUXpressso) expects the cmake files to have a .o extension, whereas in my case these have the extension .c.obj.

Adjusting this in the ld file fixed the issue.

Thanks for the support!

在原帖中查看解决方案

2 回复数
977 次查看
Geiger8759
Contributor III

Hi @kerryzhou ,

Thank you for the information.

I resolved the issue. 
The problem was that the generated linker file (ld file generated by MCUXpressso) expects the cmake files to have a .o extension, whereas in my case these have the extension .c.obj.

Adjusting this in the ld file fixed the issue.

Thanks for the support!

991 次查看
kerryzhou
NXP TechSupport
NXP TechSupport

Hi @Geiger8759 ,

  Please check my document at first:

https://community.nxp.com/t5/i-MX-RT-Knowledge-Base/RT-Linux-SDK-build-based-on-Ubuntu/ta-p/1690185

chapter 3.3 Code configuration

It will help to add the XIP header or not in the project, you also can check your generated app.srec or hex, or bin, to check whether it contains the FCB to boot or not.

If you use the debugger to download the app image, you need to let the image also contains the FCB for booting.

 

Wish it helps you!

If you still have question about it, please kindly let me know.

Best Regards,

Kerry