MIPS ARM elf loader

目录 未分类

源码下载:Tiny_elf_loader(source code download)

ARM i.mx6ull (裸机)运行效果

MIPS (RTOS)运行效果

tiny_elf_loader支持mips/arm/i386的ELF 格式module动态链接加载:

#MIPS mod在下面3种gcc做过测试:
CC = mips-linux-gnu-gcc
CC = mips-mti-linux-gnu-gcc
CC = mips-sde-elf-gcc

#ARM mod在下面1种gcc有做过测试:
CC = arm-linux-gnueabihf-gcc

#使用tiny elf loader前,参考user_define.c文件中各个接口配置:
例如:
int user_symbol_init(void)
{
//example:
/* define for test */
define_symbol(NULL, “test_xx”, define_null_test);
define_symbol(NULL, “printf1”, printf);

}

#提供给外部接口调用open
void mod_open(void)
{
}

#提供给外部接口调用释放
void mod_close(void)
{
}

#提供3种加载module的方式
#从mem中加载
void *mem_load_file(char *file, size_t *size)
{
}

#从usb中加载
void *usb_load_file(char *file, size_t *size)
{
}

#从网络中加载
void *http_load_file(char *file, size_t *size)
{
}

注意:
MIPS:
cpu硬件浮点型的支持和软件浮点型的支持;
如果遇到浮点数运算死机问题,检查硬件浮点有没有开启,
或者出现浮点开启后有UNDEFINE问题,可以相应调整gcc配置选项解决;

mips的汇编重定位类型还不支持R_MIPS_GPREL16,
默认的makefile配置gcc选项会将R_MIPS_GPREL16
转成R_MIPS_HI16和R_MIPS_LO16(RTOS)测试OK;

ARM(imx6ull):
cpu开启硬件浮点型的支持;
使用默认的makefile配置编译使用,(裸机)测试OK;

其它,注意加载内存地址的对齐问题,注意icache,dcache刷新问题(如果需要);
————————————————————————–
此代码参考了一位叫Yury Ossadchy的作者的i386 elfloader源码,
在此基础上加入了MIPS与ARM的部分并做多处改进,
由于此份代码年代久远,本想给该作者寄去一份修改的源码,github也已找不到其本人,
在此感谢Yury Ossadchy。
如果你有改进的版本,也非常欢迎寄一份给我lizhiliang06@qq.com。

device tree

目录 未分类

device_tree.rar 编译与反编译,了解其变量定义与链接
Linux的设备树(Device Tree)是一种描述硬件设备和设备驱动程序之间关系的数据结构。它是一种中立的、硬件描述的语言,用于在Linux内核中描述系统的硬件架构和设备配置信息。

传统上,操作系统内核需要直接了解硬件的具体细节和配置信息才能正确地管理和操作设备。然而,随着硬件平台的复杂性增加,移植操作系统变得更加困难和耗时。为了解决这个问题,设备树被引入到Linux内核中。

设备树以一种结构化的方式描述了硬件平台的组成部分,包括处理器、内存、总线、外设等。它提供了一个独立于具体硬件架构的中间表示,使得内核能够根据设备树的描述来自动配置和管理硬件设备。

在Linux内核启动过程中,设备树会被加载到内存中,并由内核解析和使用。内核使用设备树来识别硬件设备并加载相应的设备驱动程序。设备树中的节点描述了设备的特性、寄存器地址、中断信息等,并与设备驱动程序进行匹配,以便内核能够正确地初始化和操作设备。

通过使用设备树,可以实现在不同硬件平台上的内核移植和设备驱动程序的共享。硬件开发人员可以为特定的硬件平台编写设备树描述,而设备驱动程序开发人员则可以针对设备树中定义的设备特性编写通用的设备驱动程序。

因此,设备树在Linux中扮演了一个重要的角色,它提供了一种硬件描述的中间表示,使得内核能够以一种通用的方式管理和操作各种硬件设备,从而实现了更好的可移植性和设备驱动程序的共享。

设备树的编译与反编译(ubuntu20.04 dtc 编译工具)
## 在该目录编译dts:
dtc -I dts -O dtb linuxer-demosoc-evb.dts -o linuxer-demosoc-evb.dtb
## 反编译:
dtc -I dtb -O dts linuxer-demosoc-evb.dtb -o 1.dts
或者
fdtdump linuxer-demosoc-evb.dtb > 1.dts

1.dts就是从dtb反编译到dts的结果。

esp32+lwip+wireguard test

目录 未分类

开发板:wireguard 客户端, lwip+esp32

客户端显示:

ubuntu1804服务端mini http测试服务器:

ubuntu1804服务端wireguard服务器:

wireshark抓包,二级路由通信数据包: