多线程
1、线程
同一进程中,执行的每个任务都被视为一个线程。
一个进程中可以包含多个线程,所有线程共享进程拥有的资源。当然,每个线程也可以拥有自己的私有资源。
2、查看源代码
源代码如下:
3、编辑
gcc 1.pthread_create_exit.c -pthread
./a.out
结果如下:
gcc -pthread 2.pthread_join.c -lm
./a.out
其中“-lm”出现的原因是无法运行,通过查询"man tan"可知,需要加上"-lm"。
gcc -pthread 3.pthread_attr_init_destroy_getstack-foo_bar.c
./a.out
未出现结果
gcc -pthread 4.pthread_mutex.c
./a.out
gcc -pthread 5.pthread_dead_lock_of_mutex.c
./a.out
gcc -pthread 6.pthread_conditional_var.c
./a.out
进程
1、概念
程序以源文件的方式存储在外存(比如硬盘、U盘等)中,只有运行的时候才会被载入内存。对于支持并行的操作系统来说,必须为每一个运行的程序分配所需的资源(内存空间、输入输出设备等),并确保同时运行的程序之间不会相互干扰,为此,操作系统将每一个运行着的程序视为一个进程:
(1)操作系统以进程为单位,为每个进程分配执行所需要的资源;
(2)原则上,各个进程之间不允许访问对方的资源;
(3)操作系统实时监控着每个进程的执行状态,必要时可以强制其终止执行。
2、编辑
使用makefile,命令为make
例如:
./3-fork-print-pid.c
结果如下:
开发板
准备好虚拟机和ubuntu系统,本实验版本为ubuntu18.04x64
参考文档:https://www.csdn.net/tags/OtTaYgwsODIwOTAtYmxvZwO0O0OO0O0O.html
1、下载成功后,进入ubuntu-18.04_imx6ul_qemu_system目录,执行install_sdl.sh
2、运行QEMU
./qemu-imx6ull-gui.sh
下载、编译内核
参考: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
设置工具链
$ 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 //这一步需要等待一段时间
在QEMU中使用新的zImage:把编译出来的zImage复制到QEMU目录即可。
QEMU所用的内核里已经带有LCD驱动程序了,要测试我们编写的驱动程序,需要替换LCD驱动程序。
#obj-y += 100ask_qemu_fb.o
obj-y += lcd_drv.o
最后,即可重新执行make zImage编译内核,内核里就含有新的驱动程序了。
测试结果如下:
https://blog.csdn.net/sl_97/article/details/124079925?spm=1001.2014.3001.5501