linux link script symbol export to C
来源:互联网 发布:数控编程的方法 编辑:程序博客网 时间:2024/06/04 17:48
有一个需求,就是我需要赋值一段binary到sram. 由于代码本身就跑在sram中,所以,我就想着在link script中定义一块区域用来存放这块binary.
目的有两个,确保,sram有足够的空间来存储。 在link script中, bss之后定义这块区域。
第二是避免这块区域被破坏,将data, text, bss, stack段与这块区域分开。 还有就是范围检测。 sram只有8k,如果最后地址计算超出范围,就让编译失败并告警。
问题来了。 在c 代码中,我需要引用一个地址,就是我在ld文件中定义的buffer起始地址。 比如说ld中:
__bin_data_start =.;
.bin_data : { . += 0x800; }
__bin_data_end = .;
在C 代码中,要想使用__bin_data_start, 需要用一下方法:
1.extern TYPE __bin_data_start
2. 在引用__bin_data_start的时候前面要加&
比如说赋值: int x = &__bin_data_start;
可以从u-boot中看到类似的用法:
vim asm-generic/sections.h
11
12 /* References to section boundaries */
13
14 extern char _text[], _stext[], _etext[];
15 extern char _data[], _sdata[], _edata[];
16 extern char __bss_start[], __bss_stop[];
17 extern char __init_begin[], __init_end[];
18 extern char _sinittext[], _einittext[];
19 extern char _end[], _init[];
20 extern char __per_cpu_load[], __per_cpu_start[], __per_cpu_end[];
21 extern char __kprobes_text_start[], __kprobes_text_end[];
22 extern char __entry_text_start[], __entry_text_end[];
23 extern char __initdata_begin[], __initdata_end[];
24 extern char __start_rodata[], __end_rodata[];
如何使用:
105 static int display_banner(void)
106 {
107 printf("\n\n%s\n\n", version_string);
108 debug("U-Boot code: %08lX -> %08lX BSS: -> %08lX\n",
109 (ulong)&_start,
110 (ulong)&__bss_start, (ulong)&__bss_end);
具体,建议仔细看看 https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/4/html/Using_ld_the_GNU_Linker/sections.html
- linux link script symbol export to C
- Linux文件系统之hard link&symbol link
- C#Export data to CSV
- Linux中Hard link和Symbol link的区别
- export symbol 与 export symbol gpl
- linux c program link....
- C#DataGrid Export data to Excel
- LINK - Objective-C to C#
- ERROR: Symbol file could not be found. Defaulted to export symbols for ntkrnlpa.exe - Loading Kern
- linux的那些事儿之链接脚本(link script)
- windbg script to set breakpoint on netshell.dll's export function
- A shell script to format c code
- export 原理解析 (Shell Script)
- GCC link script
- 【html】link,script
- ld script to make i386 Linux kernel
- How to write a script in Linux
- unresolved external symbol __imp__... when I want to link a static library
- 自定义圆形进度条
- getchar()用法
- 软件开发过程学习笔记(三)之概要设计说明书模板
- C#与C/C++的交互
- 大数据平台架构及数据分析平台架构
- linux link script symbol export to C
- 在8X12平台添加或者移植一个完整的camera
- 散列表的详细剖析 (算法导论第11章)
- C++实现二叉树之二叉链表
- ]CUDA学习笔记2
- Android中Service(服务)详解
- AppDomain.CurrentDomain.BaseDirectory与Application.StartupPath的区别
- linux下安装nginx
- 软件开发过程学习笔记(四)之详细设计说明书模板