imx8开发笔记--基于yocto构建系统


硬件平台: imx8
操作系统: debian8


前期准备:系统配置
1.首先安装yocto需要使用的软件包(重要)

$ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat libsdl1.2-dev curl

$ sudo apt-get install ncurses-dev u-boot-tools

下边的包需要验证是否必须

$ sudo apt-get install xterm sed cvs subversion coreutils texi2html docbook-utils python-pysqlite2 help2man desktop-file-utils libgl1-mesa-dev libglu1-mesa-dev mercurial autoconf automake make gcc g++ groff lzop asciidoc 

2.修改系统默认语言为en_US.UTF-8

# dpkg-reconfigure locales

3.删除其他arm-linux-gcc编译器环境变量
yocto采用自带的编译器进行编译,需要注释掉其他交叉编译器环境变量。


配置编译环境: 进入目录执行配置(必须用普通用户执行,否则报错)

$ cd fsl-release-yocto
$ DISTRO=fsl-imx-xwayland MACHINE=imx8mqevk source fsl-setup-release.sh -b build-xwayland

DISTRO - 指定发行版
MACHINE - 指定平台型号
-b指定目标目录,执行该命令后会自动进入该目录

将downloads文件合并后,解压至fsl-release-yocto目录下

$ cat downloadsaaa* > download.tar.gz
$ tar -zxvf download.tar.gz 

重要:否则编译的时候将自动从网下下载这些东西,但某些文件貌似因为墙的原因,无法下载,从而造成编译失败。


编译内核:

清除编译状态: $ bitbake -c cleansstate virtual/kernel

配置本地编译: $ bitbake -c patch virtual/kernel

重要:
此操作执行从本地文件编译,否则默认从网上下载,会很慢,而且有可能会失败。

配置kernel: $ bitbake -c menuconfig virtual/kernel

编译kernel: $ bitbake -c compile virtual/kernel

编译模块 :$ bitbake linux-imx -c compile_kernelmodules -f -v
(实际上在执行compile命令时会自动执行,因此此步骤可以省去)


部署

$ bitbake -c deploy -f -v linux-imx

将Image/dtb/modules文件输出至build-xwayland/tmp/deploy-linux-imx目录中

执行patch操作后kernel源码位于:
build-xwayland/tmp/work-shared/imx8mqevk/kernel-source

执行menuconfig操作后会产生.config文件,位于:

build-xwayland\tmp\work\imx8mqevk-poky-linux\linux-imx\4.9.88-r0\build中

编译UBOOT:

进入uboot-imx目录下查看切换所需分支

$ cd  uboot-imx/
$ git branch
  ce-certify
  imx_v2018.03_4.14.98_2.0.0_ga-1gddr
* imx_v2018.03_4.14.98_2.0.0_ga-2gddr
  imx_v2018.03_4.14.98_2.0.0_ga-2gddr-MT3D1024M

切换分支:

$ git checkout imx_v2018.03_4.14.98_2.0.0_ga-2gddr-MT3D1024M

清除: $ bitbake -c cleansstate u-boot
编译: $ bitbake -c compile u-boot -f
部署: $ bitbake -c deploy u-boot

生成带有imx专有head信息的u-boot才能用于启动:

$ bitbake imx-boot

文件位置:tmp\deploy\images\imx8mqevk\imx-boot-imx8mqevk-sd.bin

cleansstate - 清除状态
patch - 设置本地编译(重要)
compile -f - 编译命令
deploy - 部署(将编译好的文件放至tmp/deploy目录下)
-v 显示运行状态

源码位于:tmp/work/imx8mqevk-poky-linux/u-boot-imx/2017.03-r0/git


WARNING: Host distribution "ubuntu-18.04" has not been validated with this version of the build system; you may possibly experience unexpected failures. It is recommended that you use a tested distribution.
警告:主机发行版“ubuntu-18.04”尚未通过此版本的构建系统进行验证;您可能会遇到意外的失败。建议您使用经过测试的发行版。

原因分析: 系统版本太高,尚未经过验证,实际上不影响使用,建议还是采用debian8/ubuntu16.0进行开发。


scripts/kconfig/mconf.o: In function `show_help':
mconf.c:(.text+0x914): undefined reference to `stdscr'

ncurses-dev没有安装的原因,安装后即可。


WARNING: /opt/imx8/fsl-release-yocto/sources/meta-fsl-bsp-release/imx/meta-bsp/recipes-kernel/linux/linux-imx_4.9.88.bb.do_compile is tainted from a forced run

提示强制重新编译(-f选项),正常情况,无需理会。

- 阅读全文 -

Linux系统应用--xfce4桌面应用


修改为中文

# dpkg-reconfigure locales

选择zh_CN.UTF-8,如果提示未发现locales,安装locales即可

在imx8中,安装中文语言

sudo apt-get install  language-pack-zh-han*

修改配置文件/etc/default/locale

LANG="zh_CN.UTF-8"

- 阅读全文 -

Linux系统应用--不常用的命令


查看磁盘分区UUID

# blkid /dev/sdc1
/dev/sdc1: LABEL="imx8" UUID="d78f429a-79bc-41f8-83b8-70bbcc3ea0ba" TYPE="ext4" PARTUUID="a5bc72c6-01
# ls -l /dev/disk/by-uuid/
总用量 0
lrwxrwxrwx 1 root root 10 7月  22 08:49 4db774f4-2edb-4605-be53-f758c3c6f146 -> ../../sda1
lrwxrwxrwx 1 root root 10 7月  22 08:49 7b14bfc2-9bdc-43f7-aa47-10193384bf2c -> ../../sdb1
lrwxrwxrwx 1 root root 10 7月  22 08:49 d78f429a-79bc-41f8-83b8-70bbcc3ea0ba -> ../../sdc1
lrwxrwxrwx 1 root root 10 7月  22 08:49 ef472e1f-3391-46f1-941d-8556c5901197 -> ../../sda5
lrwxrwxrwx 1 root root  9 7月  22 08:49 f789c494-adc6-4500-a8ca-d3f071f0fb85 -> ../../sdb

修改磁盘分区UUID

# tune2fs -U d78f429a-79bc-41f8-83b8-70bbcc3ea0ba /dev/sdc1

产生一个UUID

$ cat /proc/sys/kernel/random/uuid 
d938c831-51ac-4695-a160-c8d36c8f17fc

修改磁盘分区卷标

# e2label /dev/sdc1 imx8

- 阅读全文 -

Linux系统应用--常用服务


定时任务: 周期性执行的命令(如备份等)
1.安装cron服务
2.修改任务

# crontab -e

3.内容如下:每个任务一行

# m h  dom don dow
# 分,时,日,月,星期

# 每天5:00备份home目录,无关的项用*表示。
0 5 * * * tar -zcf /var/backups/home.tgz /home/

# 每周一的上午8点30分,执行一次
30 8 * * 1 tar -zcf /var/backups/svndata.tgz /opt/svndata

# 每天11:00-11:59点,每分钟执行一次
* 11 * * * /usr/local/bin/task.sh

# 每分钟执行一次
* * * * * /usr/local/bin/mtask.sh

4.重启cron服务(重要)

# /etc/init.d/cron restart

- 阅读全文 -

Linux应用程序--串口通信


通过控制台命令收发数据:

控制台配置串口参数:

# stty -F /dev/ttyUSB0 raw 9600 cs8 min 0 time 10

-F 串口设备路径
9600 波特率
cs8 bit数
min 接收字节数(缓冲区超过此数值就返回,不足时就阻塞等待)
time 读取数据超时间(单位:100ms)

控制台发送数据

# echo "Hello World" > /dev/ttyUSB0

控制台接收数据

# cat /dev/ttyUSB0

C语言编程

- 阅读全文 -


Copyright©2025 春天花会开, All Rights Reserved. Email: webmaster@oroct.com