【无标题】

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_initint pthread_mutex_init(pthread_mutex_t mutex, const pthread_mutexattr_tmutexattr);初始化锁
pthread_mutex_lockint pthread_mutex_lock(pthread_mutex_t *mutex);阻塞上锁
pthread_mutex_trylockint pthread_mutex_trylock(pthread_mutex_t *mutex);非阻塞上锁
pthread_mutex_unlockint pthread_mutex_unlock(pthread_mutex_t *mutex);解锁
pthread_mutex_destroyint 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:\$$&#123;ORIGIN&#125;/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:\$$&#123;ORIGIN&#125;/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:\$$&#123;ORIGIN&#125;/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编译内核

测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值