1.查看源代码
安装pthread库
安装manpages
查看pthread手册
2.编译各个程序并在Ubuntn运行;理解并解释运行状态和结果
1.线程的创建与终止
源代码
pthread_create() 函数声明中在<pthread.h>中,语法格式如下:
int pthread_create(pthread_t *thread,
const pthread_attr_t *attr,
void *(*start_routine) (void *),
void *arg);
pthread_t *thread:传递一个 pthread_t 类型的指针变量,也可以直接传递某个 pthread_t 类型变量的地址。
pthread_t 是一种用于表示线程的数据类型,每一个 pthread_t 类型的变量都可以表示一个线程。
注意:由于线程的竞争每次输出结果的次序都不一样
2.进程的连接与分离
源代码
想获取某个线程执行结束时返回的数据,可以调用 pthread_join() 函数来实现。
3.使用互斥量保护多线程同时输出
源代码
函数 | 声明 | 作用 |
---|---|---|
pthread_mutex_init | int pthread_mutex_init(pthread_mutex_t mutex, const pthread_mutexattr_tmutexattr); | 初始化锁 |
pthread_mutex_lock | int pthread_mutex_lock(pthread_mutex_t *mutex); | 阻塞上锁 |
pthread_mutex_trylock | int pthread_mutex_trylock(pthread_mutex_t *mutex); | 非阻塞上锁 |
pthread_mutex_unlock | int pthread_mutex_unlock(pthread_mutex_t *mutex); | 解锁 |
pthread_mutex_destroy | int pthread_mutex_destroy(pthread_mutex_t *mutex); | 销毁锁,释放资源 |
互斥:指在某一时刻指允许一个进程运行其中的程序片,具有排他性和唯一性。对于线程A和线程B来讲,在同一时刻,只允许一个线程对临界资源进行操作,即当A进入临界区对资源操作时,B就必须等待;当A执行完,退出临界区后,B才能对临界资源进行操作。 临界资源:能够被多个线程共享的数据/资源。 临界区:对临界资源进行操作的那一段代码
4.条件变量使用
源代码
线程条件变量
进程获取测试环境变量代码
通过main()函数的第三个参数env循环获取
3.运行开发板
QEMU的下载
参考文档:https://www.csdn.net/tags/OtTaYgwsODIwOTAtYmxvZwO0O0OO0O0O.html
安装SDL
下载成功后,进入ubuntu-18.04_imx6ul_qemu_system目录,执行install_sdl.sh,如下所示:
ls imx6ull-system-image qemu-imx6ull-gui_test.sh source install_sdl.sh qemu-imx6ull-nogui.sh ubuntu-18.04_sdl-package qemu README.md qemu-imx6ull-gui.sh rootfs_test
运行
在Ubunut的桌面环境下启动终端,执行./qemu-imx6ull-gui.sh
ls imx6ull-system-image qemu-imx6ull-gui_test.sh source install_sdl.sh qemu-imx6ull-nogui.sh ubuntu-18.04_sdl-package qemu README.md qemu-imx6ull-gui.sh rootfs_test ./qemu-imx6ull-gui.sh
1.BUG
x6ull-gui.sh qemu-system-arm: warning: nic imx.enet.0 has no peer qemu-system-arm: warning: nic imx.enet.1 has no peer libGL error: MESA-LOADER: failed to open vmwgfx (search paths /usr/lib/x86_64-linux-gnu/dri:\$${ORIGIN}/dri:/usr/lib/dri) libGL error: failed to load driver: vmwgfx libGL error: MESA-LOADER: failed to open vmwgfx (search paths /usr/lib/x86_64-linux-gnu/dri:\$${ORIGIN}/dri:/usr/lib/dri) libGL error: failed to load driver: vmwgfx libGL error: MESA-LOADER: failed to open swrast (search paths /usr/lib/x86_64-linux-gnu/dri:\$${ORIGIN}/dri:/usr/lib/dri) libGL error: failed to load driver: swrast X Error of failed request: GLXBadContext Major opcode of failed request: 153 (GLX) Minor opcode of failed request: 6 (X_GLXIsDirect) Serial number of failed request: 114 Current serial number in output stream: 113
2.解决方案 以sudo apt --fix-broken install
安装驱动
3.重新执行
问题解决
4.使用开发板
下载编译内核
参考:http://wiki.100ask.org/Qemu
安装 lzop 工具
sudo apt-get install lzop
下载源码
git clone https://e.coding.net/codebug8/repo.git
mkdir -p 100ask_imx6ull-qemu && cd 100ask_imx6ull-qemu
../repo/repo init -u https://e.coding.net/weidongshan/manifests.git -b linux-sdk -m imx6ull/100ask-imx6ull_qemu_release_v1.0.xml --no-repo-verify
成功后出现
cd 100ask_imx6ull-qemu/
ls
buildroot2019.02 linux-4.9.88 qemu ToolChain
设置工具链
命令如下
$ export ARCH=arm $ export CROSS_COMPILE=arm-linux-gnueabihf- $ export PATH=$PATH:/home/book/100ask_imx6ull-qemu/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin
配置、编译内核
安装交叉编译器
$ sudo apt install gcc-arm-linux-gnueabihf
执行如下命令
$ cd linux-4.9.88 $ make mrproper $ make 100ask_imx6ull_qemu_defconfig $ make zImage
替换LCD驱动程序
把lcd_drv.c放到内核目录linux-4.9.88/drivers/video/fbdev
修改linux-4.9.88/drivers/video/fbdev/Makefile为obj-y += lcd_drv.o
重新执行make zImage编译内核