我的E9嵌入式之旅(一)

2023-12-20 03:18
文章标签 嵌入式 之旅 e9

本文主要是介绍我的E9嵌入式之旅(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

E9: 编译模块,源码与结果

1.1  模块的编译

在: /opt/Embedsky/TQIMX6/E9/Linux/linux_E9_3.0.35_for_Linux/drivers/hello 添加 hello.c


#include <linux/init.h>
#include <linux/module.h>static int hello_init(void)
{printk(KERN_INFO " Hello World enter\n");return 0;
}static void hello_exit(void)
{printk(KERN_INFO " Hello World exit\n ");
}module_init(hello_init);
module_exit(hello_exit);MODULE_AUTHOR("Wen Zi <wenzi@gmail.com>");
MODULE_LICENSE("Dual BSD/GPL");
MODULE_DESCRIPTION("A simple Hello World Module");
MODULE_ALIAS("a simplest module");

Makefile:

obj-m:=hello.o  
hellomodule-objs:=module  
KDIR:=/opt/Embedsky/TQIMX6/E9/Linux/linux_E9_3.0.35_for_Linux  
MAKE:=make  
default:  $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules  
clean:  $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean 

然后编译的输出结果:

make[1]: 正在进入目录 `/opt/Embedsky/TQIMX6/E9/Linux/linux_E9_3.0.35_for_Linux'CC [M]  /opt/Embedsky/TQIMX6/E9/Linux/linux_E9_3.0.35_for_Linux/drivers/hello/hello.oBuilding modules, stage 2.MODPOST 1 modulesCC      /opt/Embedsky/TQIMX6/E9/Linux/linux_E9_3.0.35_for_Linux/drivers/hello/hello.mod.oLD [M]  /opt/Embedsky/TQIMX6/E9/Linux/linux_E9_3.0.35_for_Linux/drivers/hello/hello.ko
make[1]:正在离开目录 `/opt/Embedsky/TQIMX6/E9/Linux/linux_E9_3.0.35_for_Linux'

1.2  编译中的困惑

1.2.1   实际上: KDIR 代表是内核的目录,而且该目录下必有Makefile文件

1.2.2   编译中出现:

make[1]: 正在进入目录 `/opt/Embedsky/TQIMX6/E9/Linux/linux_E9_3.0.35_for_Linux'CC [M]  /opt/Embedsky/TQIMX6/E9/Linux/linux_E9_3.0.35_for_Linux/drivers/hello/hello.o
cc1: error: unrecognized command line option "-mlittle-endian"
cc1: error: unrecognized command line option "-mapcs"
cc1: error: unrecognized command line option "-mno-sched-prolog"
cc1: error: unrecognized command line option "-mno-thumb-interwork"
/opt/Embedsky/TQIMX6/E9/Linux/linux_E9_3.0.35_for_Linux/drivers/hello/hello.c:1: error: unknown ABI (aapcs-linux) for -mabi= switch
/opt/Embedsky/TQIMX6/E9/Linux/linux_E9_3.0.35_for_Linux/drivers/hello/hello.c:1: error: bad value (armv5t) for -march= switch
/opt/Embedsky/TQIMX6/E9/Linux/linux_E9_3.0.35_for_Linux/drivers/hello/hello.c:1: error: bad value (armv5t) for -mtune= switch
make[2]: *** [/opt/Embedsky/TQIMX6/E9/Linux/linux_E9_3.0.35_for_Linux/drivers/hello/hello.o] 错误 1
make[1]: *** [_module_/opt/Embedsky/TQIMX6/E9/Linux/linux_E9_3.0.35_for_Linux/drivers/hello] 错误 2
make[1]:正在离开目录 `/opt/Embedsky/TQIMX6/E9/Linux/linux_E9_3.0.35_for_Linux'
make: *** [default] 错误 2
wenzi@wenzi-e9:/opt/Embedsky/TQIMX6/E9/Linux/linux_E9_3.0.35_for_Linux/drivers/hello$ cat hello.c 

实际上,未定义: 1.2.1 中 Makefile文件中,所涉及的编译平台以及编译路径:

通过在make后面加入:

make ARCH=arm CROSS_COMPILE=/opt/Embedsky/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/tq-linaro-toolchain/bin/arm-none-linux-gnueabi-
则解决问题


2 模块的加载和卸载

2.1  加载报错1

insmod: error inserting 'hello.ko': -1 Invalid module format 

hello.c文件位于:/opt/Embedsky/TQIMX6/E9/Linux/linux_E9_3.0.35_for_Linux/drivers/hello

它实际上是在ARM 嵌入式平台下,编译的;

而在Ubuntu 12.04命令行中 运行 sudo insmod hello.ko 则是基于Ubuntu 12.04的内核的

更改,hello.c的文件路径: 

/usr/src/linux-headers-3.11.0-15/drivers/hello
更改Makefile

obj-m:=hello.o  
hellomodule-objs:=module  
KDIR:=/usr/src/linux-headers-3.11.0-15-generic/  
MAKE:=make  
default:  $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules  
clean:  $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean 
再次,sudo insmod hello.ko 则不出现2.1所报的错误

2.2  加载报错

insmod: error inserting 'hello.ko': -1 Unknown symbol in module 
用dmesg | tail :

 hello: Unknown symbol mcount (err 0)
通过网上查找资料发现是 gcc版本的问题,系统软链接的版本是gcc-4.4,需要升级到gcc-4.6,具体实现方法是在:

/usr/bin  进行以下操作:

sudo mv gcc gcc.bak
sudo ln -s gcc-4.6 gcc
再次编译,则上面出现的那个报警消失了:

make   -C /usr/src/linux-headers-3.11.0-15-generic/   SUBDIRS=/usr/src/linux-headers-3.11.0-15/drivers/hello modules  
make[1]: 正在进入目录 `/usr/src/linux-headers-3.11.0-15-generic'CC [M]  /usr/src/linux-headers-3.11.0-15/drivers/hello/hello.oBuilding modules, stage 2.MODPOST 1 modulesCC      /usr/src/linux-headers-3.11.0-15/drivers/hello/hello.mod.oLD [M]  /usr/src/linux-headers-3.11.0-15/drivers/hello/hello.ko
make[1]:正在离开目录 `/usr/src/linux-headers-3.11.0-15-generic'

利用: dmesg | tail 查看:

[24662.207514]  Hello World enter

我的嵌入式”hello word!!!“

未完,待续。。





这篇关于我的E9嵌入式之旅(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/514615

相关文章

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

荣耀嵌入式面试题及参考答案

在项目中是否有使用过实时操作系统? 在我参与的项目中,有使用过实时操作系统。实时操作系统(RTOS)在对时间要求严格的应用场景中具有重要作用。我曾参与的一个工业自动化控制项目就采用了实时操作系统。在这个项目中,需要对多个传感器的数据进行实时采集和处理,并根据采集到的数据及时控制执行机构的动作。实时操作系统能够提供确定性的响应时间,确保关键任务在规定的时间内完成。 使用实时操作系统的

嵌入式Openharmony系统构建与启动详解

大家好,今天主要给大家分享一下,如何构建Openharmony子系统以及系统的启动过程分解。 第一:OpenHarmony系统构建      首先熟悉一下,构建系统是一种自动化处理工具的集合,通过将源代码文件进行一系列处理,最终生成和用户可以使用的目标文件。这里的目标文件包括静态链接库文件、动态链接库文件、可执行文件、脚本文件、配置文件等。      我们在编写hellowor

嵌入式方向的毕业生,找工作很迷茫

一个应届硕士生的问题: 虽然我明白想成为技术大牛需要日积月累的磨练,但我总感觉自己学习方法或者哪些方面有问题,时间一天天过去,自己也每天不停学习,但总感觉自己没有想象中那样进步,总感觉找不到一个很清晰的学习规划……眼看 9 月份就要参加秋招了,我想毕业了去大城市磨练几年,涨涨见识,拓开眼界多学点东西。但是感觉自己的实力还是很不够,内心慌得不行,总怕浪费了这人生唯一的校招机会,当然我也明白,毕业

深入探索嵌入式 Linux

摘要:本文深入探究嵌入式 Linux。首先回顾其发展历程,从早期尝试到克服诸多困难逐渐成熟。接着阐述其体系结构,涵盖硬件、内核、文件系统和应用层。开发环境方面包括交叉编译工具链、调试工具和集成开发环境。在应用领域,广泛应用于消费电子、工业控制、汽车电子和智能家居等领域。关键技术有内核裁剪与优化、设备驱动程序开发、实时性增强和电源管理等。最后展望其未来发展趋势,如与物联网融合、人工智能应用、安全性与

嵌入式技术的核心技术有哪些?请详细列举并解释每项技术的主要功能和应用场景。

嵌入式技术的核心技术包括处理器技术、IC技术和设计/验证技术。 1. 处理器技术    通用处理器:这类处理器适用于不同类型的应用,其主要特征是存储程序和通用的数据路径,使其能够处理各种计算任务。例如,在智能家居中,通用处理器可以用于控制和管理家庭设备,如灯光、空调和安全系统。    单用途处理器:这些处理器执行特定程序,如JPEG编解码器,专门用于视频信息的压缩或解压。在数字相机中,单用途

基于微信小程序与嵌入式系统的智能小车开发(详细流程)

一、项目概述 本项目旨在开发一款智能小车,结合微信小程序与嵌入式系统,提供实时图像处理与控制功能。用户可以通过微信小程序远程操控小车,并实时接收摄像头采集的图像。该项目解决了传统遥控小车在图像反馈和控制延迟方面的问题,提升了小车的智能化水平,适用于教育、科研和娱乐等多个领域。 二、系统架构 1. 系统架构设计 本项目的系统架构主要分为以下几个部分: 微信小程序:负责用户界面、控制指令的

嵌入式面试经典30问:二

1. 嵌入式系统中,如何选择合适的微控制器或微处理器? 在嵌入式系统中选择合适的微控制器(MCU)或微处理器(MPU)时,需要考虑多个因素以确保所选组件能够满足项目的具体需求。以下是一些关键步骤和考虑因素: 1.1 确定项目需求 性能要求:根据项目的复杂度、处理速度和数据吞吐量等要求,确定所需的处理器性能。功耗:评估系统的功耗需求,选择低功耗的MCU或MPU以延长电池寿命或减少能源消耗。成本

嵌入式Linux C基本知识点总结

学习这块知识点有好久了,最近借一本书的框架来对基本的知识点进行总结,参考《嵌入式Linux上的C语言编程实践》进行总结记录之。 一、 基本开发环境 Linux下C语言开发环境 使用工具:程序生成工具GCC、程序调试工具GDB、工程管理工具为make和Makefile。 开发流程:使用编辑工具编写C语言源文件,然后编译生成机器代码为主的二进制可执行程序。 编译流程:C语言经过编译-汇

Spring Boot 注解探秘:HTTP 请求的魅力之旅

在SpringBoot应用开发中,处理Http请求是一项基础且重要的任务。Spring Boot通过提供一系列丰富的注解极大地简化了这一过程,使得定义请求处理器和路由变得更加直观与便捷。这些注解不仅帮助开发者清晰地定义不同类型的HTTP请求如何被处理,同时也提升了代码的可读性和维护性。 一、@RequestMapping @RequestMapping用于将特定的HTTP请求映射到特定的方法上