普法网站建设,香精,搜索引擎网站搭建,扒wordpress站1. 建立交叉编译链接环境 官网下载的SDK包中就有交叉工具链#xff0c;米尔提供的这个 SDK 中除了包含各种源代码外还提供了必要的交叉工具链#xff0c;可以直接用于编译应用程序等。 用户可以直接使用次交叉编译工具链来建立一个独立的开发环境#xff0c;可单独编译…1. 建立交叉编译链接环境 官网下载的SDK包中就有交叉工具链米尔提供的这个 SDK 中除了包含各种源代码外还提供了必要的交叉工具链可以直接用于编译应用程序等。 用户可以直接使用次交叉编译工具链来建立一个独立的开发环境可单独编译 Bootloade rKernel 或者编译自己的应用程序。我们这一节重点是编译应用程序。 1.1 建立虚拟机环境 当然前提是先安装虚拟机我们开发环境配置在ubuntu18.04虚拟机下。 1.2. 下载并安装SDK
官网链接 MYIR
源码暂不提供 应该是需要单独申请没关系并不影响我们应用程序开发。
建立工具链目录并解压完成后 1.3 环境配置
开发包里写好了env.sh脚本可以完成环境配置 #!/bin/shexport PATH$PATH:/home/hy/jd9x/tool/gcc_linaro/gcc-arm-none-eabi-7.3.1/bin:/home/hy/jd9x/tool/gcc_linaro/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-elf/bin:/home/hy/jd9x/tool/gcc_linaro/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin
export ARCHarm64
export CROSS_COMPILEaarch64-linux-gnu-
export PREFIXaarch64-linux-gnu-
export ASaarch64-linux-gnu-as
export LDaarch64-linux-gnu-ld
export CCaarch64-linux-gnu-gcc
export ARaarch64-linux-gnu-ar
export NMaarch64-linux-gnu-nm
export STRIPaarch64-linux-gnu-strip
export OBJCOPYaarch64-linux-gnu-objcopy
export OBJDUMPaarch64-linux-gnu-objdump
主要也是配置各种路径参数。
2. 测试下环境安装情况 ~/jd9x$ aarch64-linux-gnu-gcc -v
Using built-in specs.
COLLECT_GCCaarch64-linux-gnu-gcc
COLLECT_LTO_WRAPPER/home/hy/jd9x/tool/gcc_linaro/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/../libexec/gcc/aarch64-linux-gnu/7.3.1/lto-wrapper
Target: aarch64-linux-gnu
Configured with: /home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/snapshots/gcc.git~linaro-7.3-2018.05/configure SHELL/bin/bash --with-mpc/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/_build/builds/destdir/x86_64-unknown-linux-gnu --with-mpfr/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/_build/builds/destdir/x86_64-unknown-linux-gnu --with-gmp/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/_build/builds/destdir/x86_64-unknown-linux-gnu --with-gnu-as --with-gnu-ld --disable-libmudflap --enable-lto --enable-shared --without-included-gettext --enable-nls --with-system-zlib --disable-sjlj-exceptions --enable-gnu-unique-object --enable-linker-build-id --disable-libstdcxx-pch --enable-c99 --enable-clocalegnu --enable-libstdcxx-debug --enable-long-long --with-cloogno --with-pplno --with-islno --disable-multilib --enable-fix-cortex-a53-835769 --enable-fix-cortex-a53-843419 --with-archarmv8-a --enable-threadsposix --enable-multiarch --enable-libstdcxx-timeyes --enable-gnu-indirect-function --with-build-sysroot/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/_build/sysroots/aarch64-linux-gnu --with-sysroot/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/_build/builds/destdir/x86_64-unknown-linux-gnu/aarch64-linux-gnu/libc --enable-checkingrelease --disable-bootstrap --enable-languagesc,c,fortran,lto --buildx86_64-unknown-linux-gnu --hostx86_64-unknown-linux-gnu --targetaarch64-linux-gnu --prefix/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/_build/builds/destdir/x86_64-unknown-linux-gnu
Thread model: posix
gcc version 7.3.1 20180425 [linaro-7.3-2018.05 revision d29120a424ecfbc167ef90065c0eeb7f91977701] (Linaro GCC 7.3-2018.05) 看起来应该没什么问题了。 3. Hello World小应用编译下载运行
3.1 编辑makefile
TARGET $(notdir $(CURDIR))
objs : $(patsubst %c, %o, $(shell ls *.c))
$(TARGET)_app:$(objs)$(CC) -o $ $^
%.o:%.c$(CC) -c -o $ $
clean:rm -f $(TARGET)_app *.all *.o${CC} -I . -c helloWorld.
稍稍解释下
Makefile 有其自身的一套规则。 target ... : prerequisites ... command
其中 target 可以是一个 object file(目标文件)也可以是一个执行文件还可以是一个 标签label。 prerequisites 就是要生成那个 target 所需要的文件或是目标。 command 也就是 make 需要执行的命令。 所以上面的make文件的内容解析
$(notdir $(path)) 表示把 path 目录去掉路径名只留当前目录名比如当 前 Makefile 目录为/home/wujl/key_led执行为就变为 TARGET key_led $(patsubst pattern, replacement,text) 用 replacement 替换 text 中符合 格式pattern 的字符如$(patsubst %c, %o, $(shell ls *.c))表示先列出 当前目录后缀为.c 的文件然后换成后缀为.o CCC 编译器的名称 CXX: C编译器的名称 clean: 是一个约定的目标
3.2 编辑应用代码 #include stdio.h
#include stdlib.h
#include string.h/* print helloworld */
int main(int argc, char **argv)
{printf(j9x, hello world \n);return 0;
}
3.3 在项目目录下编译 生成可执行的应用程序helloWorld_app
3.4 目标机执行
此时可以用filezilla把上述可执行文件copy到目标机目录下 转移至secureCRT调试页面执行刚刚copy过来的可执行文件 rootmyd-jd9x:~/app# ls
helloWorld_app
rootmyd-jd9x:~/app# ./helloWorld_app
-sh: ./helloWorld_app: Permission denied
rootmyd-jd9x:~/app# cd ../
rootmyd-jd9x:~# chmod 777 app -R
rootmyd-jd9x:~# cd app
rootmyd-jd9x:~/app# ./helloWorld_app
j9x, hello world
rootmyd-jd9x:~/app#
中间遇到读写权限问题用chmod命令设置下。 4. 资源调用-配置点灯
4.1 环境测试
linux下一切皆是文件外设也是。
操作 LED 的目录为/sys/class/leds
rootmyd-jd9x:~/app# cd /sys/class/leds
rootmyd-jd9x:/sys/class/leds# ls
debug mmc0:: mmc1:: mmc2:: run
rootmyd-jd9x:/sys/class/leds# 测试debug灯不同状态
读取熄灭点亮触发模式
rootmyd-jd9x:/sys/class/leds# cat ./debug/brightness
0rootmyd-jd9x:/sys/class/leds# echo 0 ./debug/brightness
rootmyd-jd9x:/sys/class/leds# echo 1 ./debug/brightness
rootmyd-jd9x:/sys/class/leds# echo timer ./debug/trigger
rootmyd-jd9x:/sys/class/leds# echo heartbeat ./debug/trigger 4.2 编写应用程序
功能 根据输入参数来配置debug按不同模式来工作
off: 关闭
mode0: timer
mode1: heartbeat
代码
#include linux/input.h
#include sys/types.h
#include sys/stat.h
#include fcntl.h
#include sys/ioctl.h
#include stdio.h
#include stdlib.h
#include string.h
#include unistd.h
/* ./key_led /dev/input/event0 noblock */
int main(int argc, char **argv)
{int fd,bg_fd;int err, len, i;unsigned char flag;unsigned int data[1];char *bg /sys/class/leds/debug/trigger;struct input_event event;
if(argc2){
printf(argv must in 0-2. \n);
return -1;
}
if(!strcmp(argv[1],mode0)){
printf(blink mode 0. \n);
system(echo timer /sys/class/leds/debug/trigger);
return 0;
}
if(!strcmp(argv[1],mode1)){
printf(blink mode 1. \n);
system(echo heartbeat /sys/class/leds/debug/trigger);
return 0;
}if(!strcmp(argv[1],off)){
printf(blink mode off. \n);
system(echo 0 /sys/class/leds/debug/brightness);
return 0;
}
else{
printf(blink set error. \n);
}
编译测试 rootmyd-jd9x:~/app# ./ledBlink_test off
blink mode off.
rootmyd-jd9x:~/app# ./ledBlink_test mode0
blink mode 0.
rootmyd-jd9x:~/app# ./ledBlink_test mode1
blink mode 1.结果OK。