├── .gitignore ├── .vscode ├── c_cpp_properties.json └── settings.json ├── LICENSE ├── README.md ├── readme_file.py └── src ├── ch00.PRFEACE.md ├── ch01-00.platform_env_struct.md ├── ch01-01.linux_shell_cmd.md ├── ch01-02.linux_software_install.md ├── ch01-03.linux_shell_grammar.md ├── ch01-04.linux_cross_compiler.md ├── ch01-05.linux_quick_deploy.md ├── ch01-x1.linux_quick_platform.md ├── ch01-xz.linux_feature_notes.md ├── ch02-00.system_bringup.md ├── ch02-01.makefile.md ├── ch02-02.menuconfig.md ├── ch02-03.uboot_imx_transplate.md ├── ch02-04.uboot_env.md ├── ch02-05.uboot_analyse.md ├── ch02-06.kernel_transplate.md ├── ch02-07.kernel_analyse.md ├── ch02-08.rootfs_overview.md ├── ch02-09.rootfs_busybox.md ├── ch02-10.rootfs_buildroot.md ├── ch02-11.rootfs_debian.md ├── ch02-12.rootfs_ubuntu.md ├── ch02-13.rootfs_qtsupport.md ├── ch02-14.rootfs_openwrt.md ├── ch02-15.rootfs_armbian.md ├── ch02-16.android_sdk.md ├── ch02-17.spl_and_tfa.md ├── ch02-18.multi_core.md ├── ch02-19.virtual_machine.md ├── ch02-x1.imx6ull_platform.md ├── ch02-x2.rk3568_platform.md ├── ch02-x3.t113i_platform.md ├── ch02-x4.h618_platform.md ├── ch02-x5.stm32_uboot.md ├── ch02-x6.uboot_script_overlay.md ├── ch02-xz.system_feature_notes.md ├── ch03-00.driver_design.md ├── ch03-01.device_tree.md ├── ch03-02.armcore_analyse.md ├── ch03-03.char_device.md ├── ch03-04.pinctrl_subsystem.md ├── ch03-05.input_subsystem.md ├── ch03-06.interrput_interaction.md ├── ch03-07.i2c_frame.md ├── ch03-08.spi_frame.md ├── ch03-09.iio_subsystem.md ├── ch03-10.regmap_interface.md ├── ch03-11.rtc_subsystem.md ├── ch03-12.pwm_frame.md ├── ch03-13.brightness.md ├── ch03-14.thermal_frame.md ├── ch03-15.wdt.md ├── ch03-16.random.md ├── ch03-17.regulator.md ├── ch03-18.tty_serial_console.md ├── ch03-19.nvmem.md ├── ch03-20.csi_frame.md ├── ch03-21.usb.md ├── ch03-22.can_net_device.md ├── ch03-23.emac_net_device.md ├── ch03-24.fb_frame.md ├── ch03-25.audio.md ├── ch03-26.hdmi_output.md ├── ch03-27.pcie.md ├── ch03-28.cpufreq_opp.md ├── ch03-29.clk_subsystem.md ├── ch03-30.npu_rknn.md ├── ch03-31.block_virt_ram.md ├── ch03-32.block_sd.md ├── ch03-x1.kernel_base_api.md ├── ch03-x2.kernel_tree_api.md ├── ch03-x3.kernel_resource_base_api.md ├── ch03-x4.kernel_resource_improve_api.md ├── ch03-x5.kernel_concurrency_api.md ├── ch03-x6.mx6ull_dts_analysis.md ├── ch03-x7.t113_i_dts_analysis.md ├── ch03-x8.rk3568_dts_analysis.md ├── ch03-x9.core_concurrency.md ├── ch03-xa.amp_process.md ├── ch03-xz.driver_feature_notes.md ├── ch04-00.application_design.md ├── ch04-01.cpp_grammar.md ├── ch04-02.linux_debug_gdb.md ├── ch04-03.time_function.md ├── ch04-04.socket_design.md ├── ch04-05.process_communication.md ├── ch04-06.hardware_access.md ├── ch04-07.web_design.md ├── ch04-08.fb_app.md ├── ch04-09.gui_qt_design.md ├── ch04-10.lvgl_application.md ├── ch04-11.ffmpeg_webrtc.md ├── ch04-12.mqtt_client.md ├── ch04-13.modbus.md ├── ch04-14.python_design.md ├── ch04-15.v4l2_opencv.md ├── ch04-16.integrated_design.md ├── ch04-x1.linux_base_api.md ├── ch04-x2.linux_complex_api.md ├── ch04-x3.cmake.md ├── ch05.conclusion.md ├── end_appendix-01.website.md ├── end_appendix-02.interview_base.md ├── end_appendix-03.interview_driver.md ├── end_appendix-04.interview_app.md ├── file ├── application.drawio ├── ch01-03 │ ├── 01.shell_var.sh │ ├── 02.function.sh │ ├── 03.math_logic.sh │ ├── 04.file_remap.sh │ ├── 05.loop_branch.sh │ ├── err2.log │ ├── system_info.sh │ └── test │ │ ├── 1.txt │ │ ├── err.log │ │ ├── file.c │ │ ├── mydata.txt │ │ ├── test.file │ │ ├── test.log │ │ ├── test.txt │ │ └── testfile ├── ch01-06 │ ├── preBuildEnvironment.sh │ ├── pull_build_linux_software.sh │ ├── runscript.sh │ ├── test.sh │ └── testfile ├── ch02-01 │ ├── 01.hello │ │ ├── build.sh │ │ └── hello.c │ ├── 02.basic │ │ ├── Makefile │ │ ├── hello │ │ │ ├── hello.c │ │ │ └── hello.h │ │ └── main.c │ ├── 03.detect │ │ ├── Makefile │ │ ├── hello │ │ │ ├── hello.c │ │ │ └── hello.h │ │ └── main.c │ ├── 04.include │ │ ├── Makefile │ │ ├── build.mk │ │ ├── main.c │ │ ├── test.cpp │ │ └── test.h │ ├── 05.static_lib │ │ ├── Makefile │ │ ├── lib │ │ │ ├── Makefile │ │ │ ├── build.sh │ │ │ ├── lib_obj1.c │ │ │ └── lib_obj2.c │ │ └── main.c │ ├── 06.dynamic_lib │ │ ├── Makefile │ │ ├── lib │ │ │ ├── Makefile │ │ │ ├── build.sh │ │ │ ├── lib_obj1.c │ │ │ └── lib_obj2.c │ │ └── main.c │ ├── 07.extend │ │ ├── Makefile │ │ ├── main.c │ │ └── test.c │ └── 08.integrated │ │ ├── Makefile │ │ ├── application.cpp │ │ ├── application.hpp │ │ ├── buildtool.mk │ │ ├── dynamic_test.cpp │ │ ├── main.cpp │ │ └── static_test.cpp ├── ch02-02 │ └── config1 │ │ ├── Makefile │ │ ├── file1.cpp │ │ ├── file2.cpp │ │ ├── file3.cpp │ │ ├── main.cpp │ │ └── run ├── ch02-03 │ ├── uboot-imx-lf_v2022.04-patch │ │ ├── .vscode │ │ │ └── settings.json │ │ ├── README.md │ │ ├── arch │ │ │ └── arm │ │ │ │ ├── dts │ │ │ │ ├── Makefile │ │ │ │ ├── imx6ul-14x14-rmk.dtsi │ │ │ │ ├── imx6ul.dtsi │ │ │ │ ├── imx6ull-14x14-rmk-emmc.dts │ │ │ │ ├── imx6ull-14x14-rmk-gpmi-weim.dts │ │ │ │ └── imx6ull.dtsi │ │ │ │ └── mach-imx │ │ │ │ └── mx6 │ │ │ │ └── Kconfig │ │ ├── board │ │ │ └── freescale │ │ │ │ └── mx6ullrmk │ │ │ │ ├── Kconfig │ │ │ │ ├── MAINTAINERS │ │ │ │ ├── Makefile │ │ │ │ ├── imximage.cfg │ │ │ │ ├── imximage_lpddr2.cfg │ │ │ │ ├── mx6ullrmk.c │ │ │ │ └── plugin.S │ │ ├── configs │ │ │ ├── mx6ull_14x14_rmk_emmc_defconfig │ │ │ ├── mx6ull_14x14_rmk_nand_defconfig │ │ │ └── mx6ull_14x14_rmk_sd_defconfig │ │ ├── drivers │ │ │ └── net │ │ │ │ └── phy │ │ │ │ └── phy.c │ │ ├── include │ │ │ └── configs │ │ │ │ └── mx6ullrmk.h │ │ ├── rmk_build_emmc.sh │ │ └── uboot_upgrade.sh │ └── uboot.xlsx ├── ch02-06 │ ├── Makefile │ ├── imx6ul-14x14-rmk.dtsi │ ├── imx6ull-14x14-emmc-4.3-800x480-c.dts │ ├── imx6ull-14x14-nand-4.3-800x480-c.dts │ └── imx_rmk_v7_defconfig ├── ch02-08 │ ├── create_debain.sh │ └── imx6ull_user_defconfig ├── ch02-09 │ └── etc │ │ ├── fstab │ │ ├── hostname │ │ ├── inittab │ │ ├── network │ │ └── interfaces │ │ ├── passwd │ │ └── resolv.conf ├── ch02-10 │ └── buildroot-patch │ │ ├── dl │ │ └── helloworld │ │ │ ├── Makefile │ │ │ └── helloworld.c │ │ └── package │ │ ├── Config.in │ │ └── helloworld.mk ├── ch02-13 │ ├── Makefile │ ├── build.sh │ ├── image_display.pro │ ├── main.cpp │ ├── mainwindow.cpp │ └── mainwindow.h ├── ch02-x1 │ └── make.sh ├── ch02-x2 │ └── make.sh ├── ch02-x6 │ ├── boot.cmd │ ├── build_shell.sh │ ├── config.txt │ └── imx6ull-rmk-overlay.dts ├── ch02-xz │ ├── mksdcard.sh │ └── ucl2.xml ├── ch03-00 │ ├── bus_module │ │ ├── device │ │ │ ├── Makefile │ │ │ └── kernel_platform_device.c │ │ └── driver │ │ │ ├── Makefile │ │ │ └── kernel_platform_driver.c │ ├── multi_file │ │ ├── Makefile │ │ ├── kernel_base.c │ │ └── kernel_main.c │ └── relay_on │ │ ├── export │ │ ├── Makefile │ │ └── export.c │ │ └── relay │ │ ├── Makefile │ │ └── relay.c ├── ch03-03 │ ├── beep │ │ ├── Makefile │ │ └── kernel_beep.c │ ├── example │ │ ├── Makefile │ │ └── kernel_example.c │ └── miscbeep │ │ ├── Makefile │ │ ├── kernel_miscbeep.c │ │ └── test │ │ ├── Makefile │ │ └── beep_test.c ├── ch03-04 │ ├── Makefile │ ├── kernel_led.c │ └── test │ │ ├── Makefile │ │ └── led_test.c ├── ch03-05 │ ├── key_input │ │ ├── Makefile │ │ ├── kernel_input.c │ │ └── test │ │ │ ├── Makefile │ │ │ └── key_input_test.c │ └── touchscreen │ │ ├── Makefile │ │ └── kernel_gt9147.c ├── ch03-07 │ ├── Makefile │ ├── kernel_i2c_ap.c │ └── test │ │ ├── Makefile │ │ └── ap_i2c_test.c ├── ch03-08 │ ├── Makefile │ ├── kernel_bus_spi.h │ ├── kernel_spi_icm.c │ └── test │ │ ├── Makefile │ │ └── icm_spi_test.c ├── ch03-09 │ ├── iio_adc │ │ ├── Makefile │ │ ├── kernel_iio_adc.c │ │ └── kernel_iio_adc.h │ └── iio_hx711 │ │ ├── Makefile │ │ └── kernel_iio_hx711.c ├── ch03-10 │ ├── regmap_ap3216c │ │ ├── Makefile │ │ └── kernel_regmap_i2c.c │ ├── regmap_icm202608 │ │ ├── Makefile │ │ ├── kernel_regmap_spi.c │ │ └── kernel_regmap_spi.h │ └── regmap_pcf8563 │ │ ├── Makefile │ │ └── kernel_regmap_rtc.c ├── ch03-11 │ ├── Makefile │ └── kernel_rtc_pcf8563.c ├── ch03-12 │ ├── pwm_consumer │ │ ├── Makefile │ │ └── kernel_pwm_consumer.c │ └── pwm_provider │ │ ├── Makefile │ │ ├── kernel_pwm.c │ │ └── test │ │ ├── Makefile │ │ └── pwm_test.c ├── ch03-13 │ ├── Makefile │ ├── kernel_pwm_bl.c │ └── test │ │ ├── Makefile │ │ └── brightness_test.c ├── ch03-14 │ ├── iio_adc_temp │ │ ├── Makefile │ │ ├── kernel_iio_adc.c │ │ └── kernel_iio_adc.h │ ├── pwm_device │ │ ├── Makefile │ │ └── kernel_pwm.c │ ├── thermal_cooling │ │ ├── Makefile │ │ └── thermal_fan.c │ └── thermal_zone │ │ ├── Makefile │ │ └── thermal_sensor.c ├── ch03-15 │ ├── Makefile │ ├── kernel_wdt.c │ └── test │ │ ├── Makefile │ │ └── wdt_test.c ├── ch03-17 │ └── fixed.c ├── ch03-19 │ ├── nvmem_drv │ │ ├── Makefile │ │ └── kernel_nvmem.c │ ├── nvmem_ref │ │ ├── Makefile │ │ └── kernel_nvmem_ref.c │ └── test │ │ ├── Makefile │ │ └── nvmem_test.c ├── ch03-20 │ ├── ram_disk.c │ └── ram_disk_queue.c ├── ch03-22 │ ├── can_apps │ │ ├── CMakeLists.txt │ │ ├── can_socket.hpp │ │ └── can_test.cpp │ └── can_driver │ │ ├── flexcan-core.c │ │ ├── flexcan-ethtool.c │ │ └── flexcan.h ├── ch03-33 │ ├── no_queue │ │ ├── Makefile │ │ └── ram_disk.c │ └── queue │ │ ├── Makefile │ │ └── ram_disk_queue.c ├── ch03-x7 │ ├── board.dts │ └── sun8iw20p1.dtsi ├── ch04-01 │ ├── Makefile │ ├── dir_api.c │ ├── main.c │ ├── process_api.c │ └── test │ │ └── test.txt ├── ch04-02 │ ├── coredump │ │ ├── Makefile │ │ └── crash_test.cpp │ ├── vscode_local_gdb │ │ ├── .vscode │ │ │ ├── launch.json │ │ │ └── tasks.json │ │ ├── Makefile │ │ ├── application │ │ │ ├── test_file.c │ │ │ └── test_file.h │ │ └── main.c │ └── vscode_remote_gdb │ │ ├── .vscode │ │ ├── launch.json │ │ └── tasks.json │ │ ├── Makefile │ │ ├── application │ │ ├── test_file.c │ │ └── test_file.h │ │ └── main.c ├── ch04-03 │ ├── cv_timer │ │ └── main.cpp │ └── posix_timer │ │ ├── main.cpp │ │ └── test ├── ch04-05 │ ├── 01-pipe │ │ ├── CMakeLists.txt │ │ └── main.c │ ├── 02-fifo │ │ ├── CMakeLists.txt │ │ └── main.c │ ├── 03-signal │ │ ├── CMakeLists.txt │ │ └── main.c │ ├── 04-mq │ │ ├── CMakeLists.txt │ │ └── main.c │ ├── 05-sv_sem │ │ ├── CMakeLists.txt │ │ └── main.c │ ├── 06-px_sem │ │ ├── CMakeLists.txt │ │ └── main.c │ ├── 07-shm │ │ ├── CMakeLists.txt │ │ └── main.c │ └── 08-iommap │ │ ├── CMakeLists.txt │ │ └── main.c ├── ch04-07 │ ├── .vscode │ │ └── settings.json │ ├── Makefile │ ├── http_server.hpp │ ├── main.cpp │ └── www │ │ ├── css │ │ └── global.css │ │ ├── index.html │ │ └── js │ │ ├── axios.js │ │ ├── axios.js.map │ │ ├── main.js │ │ └── vue.global.js ├── ch04-08 │ ├── 01.fb_signal │ │ ├── CMakeLists.txt │ │ └── main.c │ ├── 02.fb_multi_cache │ │ ├── CMakeLists.txt │ │ └── main.c │ ├── 03.fb_graphic │ │ ├── CMakeLists.txt │ │ ├── fb_char.c │ │ ├── fb_graphic.h │ │ └── main.c │ └── 04.fb_cpp │ │ ├── CMakeLists.txt │ │ ├── fb_draw.cpp │ │ ├── fb_draw.hpp │ │ └── main.cpp ├── ch04-12 │ ├── mqtt_node_0 │ │ ├── Makefile │ │ └── mqtt_node.cpp │ ├── mqtt_node_1 │ │ ├── Makefile │ │ └── mqtt_node.cpp │ └── mqtt_paho │ │ └── mqtt_client.py ├── ch04-13 │ ├── .vscode │ │ └── settings.json │ ├── libmodbus_m │ │ ├── Makefile │ │ └── main.cpp │ └── modbus_s │ │ ├── CMakeLists.txt │ │ ├── Makefile │ │ ├── event │ │ ├── semaphore.hpp │ │ └── thread_queue.hpp │ │ ├── freemodbus │ │ ├── CMakeLists.txt │ │ ├── ascii │ │ │ ├── mbascii.c │ │ │ └── mbascii.h │ │ ├── functions │ │ │ ├── mbfunccoils.c │ │ │ ├── mbfuncdiag.c │ │ │ ├── mbfuncdisc.c │ │ │ ├── mbfuncholding.c │ │ │ ├── mbfuncinput.c │ │ │ ├── mbfuncother.c │ │ │ └── mbutils.c │ │ ├── include │ │ │ ├── mb.h │ │ │ ├── mbconfig.h │ │ │ ├── mbframe.h │ │ │ ├── mbfunc.h │ │ │ ├── mbport.h │ │ │ ├── mbproto.h │ │ │ └── mbutils.h │ │ ├── mb.c │ │ ├── rtu │ │ │ ├── mbcrc.c │ │ │ ├── mbcrc.h │ │ │ ├── mbrtu.c │ │ │ └── mbrtu.h │ │ └── tcp │ │ │ ├── mbtcp.cpp │ │ │ └── mbtcp.h │ │ ├── main.cpp │ │ ├── port │ │ ├── fifo_manage.cpp │ │ ├── fifo_manage.hpp │ │ ├── logger.hpp │ │ ├── port.h │ │ ├── portevent.cpp │ │ ├── portserial.cpp │ │ ├── porttcp.cpp │ │ ├── porttimer.cpp │ │ └── tty.hpp │ │ ├── restart.sh │ │ └── unittest │ │ └── unit_test.py ├── ch04-14 │ └── capature.py ├── ch04-x3 │ ├── project-01 │ │ ├── CMakeLists.txt │ │ └── main.cpp │ ├── project-02 │ │ ├── CMakeLists.txt │ │ └── main.cpp │ ├── project-03 │ │ ├── CMakeLists.txt │ │ ├── main.cpp │ │ └── test.cpp │ ├── project-04 │ │ ├── CMakeLists.txt │ │ ├── lib │ │ │ ├── main.hpp │ │ │ ├── test1.cpp │ │ │ ├── test2.cpp │ │ │ └── test3.cpp │ │ └── main.cpp │ ├── project-05 │ │ ├── CMakeLists.txt │ │ ├── lib │ │ │ ├── CMakeLists.txt │ │ │ ├── include │ │ │ │ └── test.hpp │ │ │ └── test.cpp │ │ └── main.cpp │ ├── project-06 │ │ ├── CMakeLists.txt │ │ ├── main.cpp │ │ ├── test.c │ │ └── test.h │ ├── project-07 │ │ ├── CMakeLists.txt │ │ └── main.cpp │ ├── project-08 │ │ ├── CMakeLists.txt │ │ └── file1.cpp │ ├── project-09 │ │ ├── CMakeLists.txt │ │ └── file2.cpp │ ├── project-10 │ │ ├── CMakeLists.txt │ │ └── main.cpp │ ├── project-11 │ │ ├── CMakeLists.txt │ │ ├── cmake │ │ │ └── FindUSER_FILES.cmake │ │ ├── library │ │ │ ├── include │ │ │ │ └── file.hpp │ │ │ └── lib │ │ │ │ └── temp │ │ └── main.cpp │ ├── project-12 │ │ ├── CMakeLists.txt │ │ ├── cmake │ │ │ └── FindMosquitto.cmake │ │ ├── include │ │ │ ├── mosquitto.h │ │ │ ├── mosquitto_broker.h │ │ │ ├── mosquitto_plugin.h │ │ │ ├── mosquittopp.h │ │ │ └── mqtt_protocol.h │ │ └── main.cpp │ └── project-13 │ │ ├── application │ │ ├── CMakeLists.txt │ │ ├── includes.h │ │ └── main.c │ │ └── dynamic_library │ │ ├── CMakeLists.txt │ │ ├── includes.h │ │ └── mainso.cpp ├── drivers_complex.drawio ├── drivers_sample.drawio ├── embed_linux_design.xlsx ├── firmware.drawio └── 开发板功能整理.xlsx └── image ├── ch01-x1-01.png ├── ch01-xz-01.png ├── ch02-01-01.png ├── ch02-01-02.png ├── ch02-01-03.png ├── ch02-01-04.png ├── ch02-01-05.png ├── ch02-01-06.png ├── ch02-01-07.png ├── ch02-01-08.png ├── ch02-02-01.png ├── ch02-02-02.png ├── ch02-02-03.png ├── ch02-02-04.png ├── ch02-03-01.png ├── ch02-04-01.png ├── ch02-06-01.png ├── ch02-06-02.png ├── ch02-06-03.png ├── ch02-06-04.png ├── ch02-06-05.png ├── ch02-08-01.png ├── ch02-09-01.png ├── ch02-10-01.png ├── ch02-10-02.png ├── ch02-10-03.png ├── ch02-10-04.png ├── ch02-10-05.png ├── ch02-10-06.png ├── ch02-10-07.png ├── ch02-10-08.png ├── ch02-10-09.png ├── ch02-10-10.png ├── ch02-11-01.png ├── ch02-11-02.png ├── ch02-14-01.png ├── ch02-14-02.png ├── ch02-17-01.png ├── ch02-17-02.png ├── ch02-17-03.png ├── ch02-17-04.png ├── ch02-x1-01.png ├── ch02-x1-02.png ├── ch02-x1-03.png ├── ch02-x1-04.png ├── ch02-x1-05.png ├── ch02-x1-06.png ├── ch02-x1-07.png ├── ch02-x1-08.png ├── ch02-x1-09.png ├── ch02-x2-01.png ├── ch02-x5-01.png ├── ch02-x5-02.png ├── ch02-x5-03.png ├── ch02-x6-01.png ├── ch02-x6-02.png ├── ch02-x6-03.png ├── ch02-x6-04.png ├── ch02-x6-05.png ├── ch02-xz-01.png ├── ch03-00-01.png ├── ch03-00-02.png ├── ch03-00-03.png ├── ch03-00-04.png ├── ch03-00-05.png ├── ch03-00-06.png ├── ch03-01-01.png ├── ch03-01-02.png ├── ch03-03-01.png ├── ch03-03-02.png ├── ch03-04-01.png ├── ch03-04-02.png ├── ch03-04-03.png ├── ch03-05-01.png ├── ch03-05-02.png ├── ch03-05-03.png ├── ch03-05-04.png ├── ch03-05-05.png ├── ch03-05-06.png ├── ch03-05-07.png ├── ch03-06-01.png ├── ch03-07-01.png ├── ch03-07-02.png ├── ch03-07-03.png ├── ch03-07-04.png ├── ch03-07-05.png ├── ch03-07-06.jpg ├── ch03-08-01.jpg ├── ch03-08-02.png ├── ch03-08-03.png ├── ch03-08-04.png ├── ch03-08-05.png ├── ch03-08-06.png ├── ch03-08-07.png ├── ch03-09-01.png ├── ch03-09-02.png ├── ch03-09-03.png ├── ch03-09-04.png ├── ch03-10-01.png ├── ch03-10-02.png ├── ch03-10-03.png ├── ch03-10-04.png ├── ch03-10-05.png ├── ch03-10-06.png ├── ch03-10-07.png ├── ch03-11-01.png ├── ch03-11-02.png ├── ch03-12-01.png ├── ch03-12-02.png ├── ch03-13-01.png ├── ch03-13-02.png ├── ch03-13-03.png ├── ch03-14-01.png ├── ch03-14-02.png ├── ch03-14-03.png ├── ch03-14-04.png ├── ch03-14-05.png ├── ch03-14-06.png ├── ch03-14-07.png ├── ch03-14-08.png ├── ch03-15-01.png ├── ch03-15-02.png ├── ch03-15-03.png ├── ch03-15-04.png ├── ch03-16-01.png ├── ch03-16-02.png ├── ch03-17-01.png ├── ch03-17-02.png ├── ch03-17-03.png ├── ch03-19-01.png ├── ch03-19-02.png ├── ch03-19-03.png ├── ch03-19-04.png ├── ch03-21-01.png ├── ch03-21-02.png ├── ch03-22-01.png ├── ch03-22-02.png ├── ch03-22-03.png ├── ch03-22-04.png ├── ch03-22-05.png ├── ch03-22-06.png ├── ch03-22-07.png ├── ch03-22-08.png ├── ch03-22-09.png ├── ch03-22-10.png ├── ch03-22-11.png ├── ch03-22-12.png ├── ch03-22-13.png ├── ch03-22-14.png ├── ch03-22-15.png ├── ch03-22-16.png ├── ch03-32-01.png ├── ch03-32-02.png ├── ch03-32-03.png ├── ch03-32-04.png ├── ch03-32-05.png ├── ch03-32-06.png ├── ch03-x6-01.png ├── ch03-xz-01.png ├── ch03-xz-02.png ├── ch03-xz-03.png ├── ch03-xz-04.png ├── ch04-00-01.png ├── ch04-00-02.png ├── ch04-00-03.png ├── ch04-00-04.png ├── ch04-02-01.png ├── ch04-02-02.png ├── ch04-02-03.png ├── ch04-02-04.png ├── ch04-02-05.png ├── ch04-07-01.png ├── ch04-08-01.png ├── ch04-08-02.png ├── ch04-08-03.png ├── ch04-08-04.png ├── ch04-08-05.png ├── ch04-12-01.png ├── ch04-12-02.png ├── ch04-12-03.png ├── ch04-12-04.png ├── ch04-12-05.png ├── ch04-13-01.png ├── ch04-x3-01.png ├── ch04-x3-02.png ├── ch04-x3-03.png ├── ch04-x3-04.png ├── ch04-x3-05.png ├── ch04-x3-06.png ├── ch04-x3-07.png ├── ch04-x3-08.png ├── ch04-x3-09.png ├── ch04-x3-10.png ├── ch04-x3-11.png ├── ch04-x3-12.png └── mainFrame.png /.gitignore: -------------------------------------------------------------------------------- 1 | *.o 2 | *.7z 3 | //*.cmd 4 | //*.mod* 5 | *.ko* 6 | *.order 7 | *.symvers 8 | *.d 9 | *.a 10 | *.so 11 | target 12 | 13 | src/file/ch*/*/*/build/* 14 | src/file/ch*/*/build/* 15 | src/file/ch*/build/* 16 | src/file/ch04-12/mqtt_node_1/mqtt_node1 17 | src/file/ch04-12/mqtt_node_0/mqtt_node0 18 | -------------------------------------------------------------------------------- /.vscode/c_cpp_properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "configurations": [ 3 | { 4 | "name": "Win32", 5 | "includePath": [ 6 | "${workspaceFolder}/**", 7 | "D:/gcc-linaro/arm-linux-gnueabihf/libc/usr/include", 8 | "D:/gcc-linaro/arm-linux-gnueabihf/libc/usr/include/linux", 9 | "D:/gcc-linaro/lib/gcc/arm-linux-gnueabihf/4.9.4/include" 10 | ], 11 | "defines": [ 12 | "_DEBUG", 13 | "UNICODE", 14 | "_UNICODE", 15 | "__ARM_PCS_VFP" 16 | ] 17 | } 18 | ], 19 | "version": 4 20 | } -------------------------------------------------------------------------------- /src/ch02-07.kernel_analyse.md: -------------------------------------------------------------------------------- 1 | # Kernel分析 2 | 3 | ## dir_notes 4 | 5 | 首先,先说明下kernel各目录的功能。 6 | 7 | | 目录 | 功能说明 | 8 | | --- | --- | 9 | | **arch** | 包含特定于CPU架构的代码,如处理器特定代码、中断处理和某些硬件抽象层。每个支持的CPU架构都有一个子目录,如arm、risc-v、x86等 | 10 | | block | 包含块设备驱动程序的代码,如硬盘驱动。这个目录实现了块设备的基本框架和块设备的I/O调度算法 | 11 | | crypto | 包含加密相关的代码,提供加密算法和哈希函数。这个目录用于实现各种密码学功能的子系统,包含了对称加密、非对称加密、哈希函数以及其他密码学算法的实现代码 | 12 | | **documentation** | 包含内核开发文档和规范。这些文档提供了对不同子系统、功能和接口的详细说明,以及编程指南、配置选项等信息 | 13 | | **drivers** | 设备驱动程序的源代码,按设备类型(如gpu、net、scsi、video等)进一步分类 | 14 | | firmware | 用于存放一些硬件设备所需的固件文件。固件是一种特殊类型的软件,包含了驱动设备所需的指令、数据和配置信息,帮助设备正确地进行初始化和操作 | 15 | | fs | 包含不同文件系统的实现,如ext4、fat、ntfs、ubifs等。这个目录是整个文件系统层次结构的核心部分,提供了与文件和目录操作、磁盘管理、文件系统接口等相关的功能 | 16 | | **include** | 包含内核的头文件,这些头文件被内核的其他部分和编译内核模块时使用 | 17 | | init | 包含初始化程序的代码,负责在系统启动时执行初始化任务。内核初始化入口函数start_kernel就是在这个目录下的文件main.c内实现的 | 18 | | ipc | 包含进程间通信(IPC)相关的代码。这个目录用于实现System V的进程间通信模块 | 19 | | kernel | 包含内核核心功能和系统调用的实现。这个目录中的代码实现了系统的核心模块的主体框架,如进程管理、进程调度器、中断处理、系统时钟管理、同步机制等 | 20 | | lib | 包含内核使用的库文件,如数学库和其他辅助功能。这些库文件为内核提供了一些基本的函数和数据结构 | 21 | | mm | 含内存管理相关的代码。这个目录实现了内存管理的各种算法和数据结构,如分页模型的框架、伙伴算法的实现和对象缓冲器slab的实现代码等 | 22 | | net | 包含网络子系统的代码,实现网络协议和网络设备驱动。这个目录包含了网络子系统相关的代码,如协议栈、驱动程序等 | 23 | | samples | 包含内核编程的示例代码。这些示例代码可以帮助开发者了解如何使用内核提供的API和接口进行编程 | 24 | | scripts | 包含用于内核配置、编译和测试的脚本。这些脚本为开发者提供了方便的工具来配置、编译和测试内核 | 25 | | secuity | 包含安全相关的代码,如强制访问控制(MAC)框架。这个目录用于存放安全框架的实现代码,如SELinux、AppArmor等 | 26 | | sound | 包含声音子系统的代码。这个目录用于存放声音系统架构相关代码和具体声卡的设备驱动程序 | 27 | | tools | 包含用于内核开发和测试的工具。这些工具可以帮助开发者进行内核调试、测试和分析等工作 | 28 | | usr | 某些Linux源码版本中可能包含此目录,用于存放用户空间工具和库的源代码。但请注意,并不是所有Linux源码版本都会包含此目录 | 29 | | virt | 包含虚拟化技术相关的代码。这个目录用于实现虚拟化技术的相关功能,如虚拟机管理、虚拟设备驱动等 | 30 | 31 | ## next_chapter 32 | 33 | [返回目录](../README.md) 34 | 35 | 直接开始下一小节: [文件系统构建说明](./ch02-08.rootfs_overview.md) -------------------------------------------------------------------------------- /src/ch02-15.rootfs_armbian.md: -------------------------------------------------------------------------------- 1 | # 基于armbian构建系统平台 2 | 3 | ## next_chapter 4 | 5 | [返回目录](../README.md) 6 | 7 | 直接开始下一章节说明: [安卓系统SDK构建](./ch02-16.android_sdk.md) 8 | -------------------------------------------------------------------------------- /src/ch02-16.android_sdk.md: -------------------------------------------------------------------------------- 1 | # 安卓系统SDK构建 2 | 3 | ## next_chapter 4 | 5 | [返回目录](../README.md) 6 | 7 | 直接开始下一章节说明: [U-Boot SPL流程和TF-A机制](./ch02-17.spl_and_tfa.md) 8 | -------------------------------------------------------------------------------- /src/ch02-18.multi_core.md: -------------------------------------------------------------------------------- 1 | # 异构多核芯片工作处理 2 | 3 | ## next_chapter 4 | 5 | [返回目录](../README.md) 6 | 7 | 直接开始下一章节说明: [虚拟机和沙箱启动](./ch02-19.virtual_machine.md) -------------------------------------------------------------------------------- /src/ch02-x4.h618_platform.md: -------------------------------------------------------------------------------- 1 | # 附录四:全志H618平台SDK操作和移植说明 2 | 3 | 本节以核桃派的进行说明,主要讲述全志H618 SDK平台和应用移植功能。 4 | 5 | ## next_chapter 6 | 7 | [返回目录](../README.md) 8 | 9 | 直接开始下一章节说明: [从移植STM32F4理解U-Boot](./ch02-x5.stm32_uboot.md) -------------------------------------------------------------------------------- /src/ch03-02.armcore_analyse.md: -------------------------------------------------------------------------------- 1 | # ARM内核和硬件分析 2 | 3 | ## next_chapter 4 | 5 | [返回目录](../README.md) 6 | 7 | 直接开始下一节说明: [字符型设备说明](./ch03-03.char_device.md) 8 | -------------------------------------------------------------------------------- /src/ch03-20.csi_frame.md: -------------------------------------------------------------------------------- 1 | # 摄像头CSI接口管理驱动 2 | 3 | ## summary 4 | 5 | ## next_chapter 6 | 7 | [返回目录](../README.md) 8 | 9 | 直接开始下一节说明: [系统时钟和OPP管理模块](./ch03-21.usb.md) 10 | -------------------------------------------------------------------------------- /src/ch03-21.usb.md: -------------------------------------------------------------------------------- 1 | # USB驱动管理框架 2 | 3 | ## usb_driver 4 | 5 | ### usb_serial 6 | 7 | usb目前主要的串口驱动是CP2102和CH340,对于目前的内核都是存在的。 8 | 9 | - 其中CP2102的驱动路径如下。 10 | 11 | ![image](./image/ch03-21-01.png) 12 | 13 | 或者直接在config下添加。 14 | 15 | ```shell 16 | CONFIG_USB_SERIAL_GENERIC=y 17 | CONFIG_USB_SERIAL_FTDI_SIO=y 18 | CONFIG_USB_SERIAL_OPTION=y 19 | CONFIG_USB_SERIAL_CP210X=y 20 | ``` 21 | 22 | - 其中CH340的驱动路径如下。 23 | 24 | ![image](./image/ch03-21-02.png) 25 | 26 | 或者直接在config下添加。 27 | 28 | ```shell 29 | CONFIG_USB_SERIAL_CH341=y 30 | ``` 31 | 32 | ### usb_wifi 33 | 34 | ## summary 35 | 36 | ## next_chapter 37 | 38 | [返回目录](../README.md) 39 | 40 | 直接开始下一节说明: [CAN网络管理框架](./ch03-22.can_net_device.md) 41 | -------------------------------------------------------------------------------- /src/ch03-23.emac_net_device.md: -------------------------------------------------------------------------------- 1 | # 网络设备驱动实现 2 | 3 | ## summary 4 | 5 | ## next_chapter 6 | 7 | [返回目录](../README.md) 8 | 9 | 直接开始下一节说明: [图形显示FrameBuffer和DRM管理框架](./ch03-24.fb_frame.md) 10 | -------------------------------------------------------------------------------- /src/ch03-26.hdmi_output.md: -------------------------------------------------------------------------------- 1 | # hdmi输出设备驱动说明 2 | 3 | ## summary 4 | 5 | ## next_chapter 6 | 7 | [返回目录](../README.md) 8 | 9 | 直接开始下一节说明: [PCIE接口驱动说明](./ch03-27.pcie.md) 10 | -------------------------------------------------------------------------------- /src/ch03-27.pcie.md: -------------------------------------------------------------------------------- 1 | # PCIE接口驱动说明 2 | 3 | ## summary 4 | 5 | ## next_chapter 6 | 7 | [返回目录](../README.md) 8 | 9 | 直接开始下一节说明: [系统时钟和OPP管理模块](./ch03-28.cpufreq_opp.md) 10 | -------------------------------------------------------------------------------- /src/ch03-30.npu_rknn.md: -------------------------------------------------------------------------------- 1 | # npu驱动应用说明 2 | 3 | ## summary 4 | 5 | ## next_chapter 6 | 7 | [返回目录](../README.md) 8 | 9 | 直接开始下一节说明: [块设备驱动和RAM模拟实现](./ch03-31.block_virt_ram.md) 10 | -------------------------------------------------------------------------------- /src/ch03-32.block_sd.md: -------------------------------------------------------------------------------- 1 | # 块设备驱动和内核中SD卡驱动解析 2 | 3 | ## sdcard_probe_workflow 4 | 5 | ```c 6 | // ====== 初始化sdhci控制器 ====== 7 | sdhci_esdhc_imx_probe => sdhci_pltfm_init 8 | 9 | // drivers/mmc/host/sdhci-pltfm.c 10 | sdhci_pltfm_init => sdhci_alloc_host 11 | 12 | // drivers/mmc/host/sdhci.c 13 | sdhci_alloc_host => mmc_alloc_host 14 | 15 | // mmc申请sdcard主机 16 | // drivers/mmc/core/host.c 17 | mmc_alloc_host => mmc_rescan 18 | 19 | // 扫描sdio总线的SDCard,检测到则初始化sd卡 20 | // drivers/mmc/core/core.c 21 | mmc_rescan => mmc_rescan_try_freq => mmc_sd_init_card 22 | 23 | // 初始化sd卡 24 | // drivers/mmc/core/sd.c 25 | mmc_sd_init_card => mmc_sd_setup_card //shows: host does not support reading read-only switch, assuming write-enable 26 | mmc_sd_init_card => mmc_attach_sd => mmc_add_card 27 | 28 | // 在总线上添加sdcard设备 29 | // drivers/mmc/core/bus.c 30 | mmc_add_card => device_add 31 | 32 | // ======= 匹配设备,执行已经加载的sdcard驱动 ====== 33 | // 当设备添加和驱动添加时,都会匹配一次,执行相应的probe函数 34 | // drivers/mmc/core/block.c 35 | mmc_blk_probe => mmc_blk_alloc => mmc_blk_alloc_req 36 | ``` 37 | 38 | ## summary 39 | 40 | ## next_chapter 41 | 42 | [返回目录](../README.md) 43 | 44 | 直接开始下一节说明: [内核驱动基础接口](./ch03-x1.kernel_base_api.md) 45 | -------------------------------------------------------------------------------- /src/ch03-x8.rk3568_dts_analysis.md: -------------------------------------------------------------------------------- 1 | # rk3568设备树分析和应用 2 | 3 | ## next_chapter 4 | 5 | [返回目录](../README.md) 6 | 7 | 直接开始下一节说明: [设备驱动中的并发控制](./ch03-x9.core_concurrency.md) 8 | -------------------------------------------------------------------------------- /src/ch03-x9.core_concurrency.md: -------------------------------------------------------------------------------- 1 | # 设备驱动中的并发控制 2 | 3 | 在操作系统中,设备驱动程序负责管理硬件设备与操作系统之间的交互。随着现代计算机系统的复杂性不断增加,多个进程或线程可能同时访问同一个设备驱动,这就带来了并发控制的问题。并发控制是确保多个执行线程能够安全、有效地共享资源的关键技术。在设备驱动中,正确的并发控制机制不仅能够提高系统的性能和效率,还能保证系统的稳定性和可靠性。 4 | 5 | 设备驱动作为管理硬件资源的接口,往往和硬件对应,具有唯一性。而在应用层中,却可能多个线程同时访问和修改同一个设备驱动,可能会导致数据不一致的问题。此外数据竞争,也可能导致资源的错误使用和浪费。因此,在设备驱动中正确的实现并发控制机制是非常重要的。 6 | 7 | ## next_chapter 8 | 9 | [返回目录](../README.md) 10 | 11 | 直接开始下一节说明: [多核异构芯片平台开发](./ch03-xa.amp_process.md) 12 | -------------------------------------------------------------------------------- /src/ch03-xa.amp_process.md: -------------------------------------------------------------------------------- 1 | # 多核异构芯片驱动开发 2 | 3 | ## next_chapter 4 | 5 | [返回目录](../README.md) 6 | 7 | 直接开始下一节说明: [驱动常见应用和问题解决](./ch03-xz.driver_feature_notes.md) 8 | -------------------------------------------------------------------------------- /src/ch04-06.hardware_access.md: -------------------------------------------------------------------------------- 1 | # linux应用硬件访问方法 2 | 3 | 对于嵌入式平台软件开发来说,与纯粹软件的区别就是包含对于硬件的访问。在之前的驱动章节中,也展示了如何在应用层访问底层硬件,不过这里还是统一进行梳理说明,方便理解。对于嵌入式Linux应用来说,访问硬件的方式主要就有以下几种。 4 | 5 | 1. 在应用层以文件形式存在,使用标准文件接口(open/read/write/close/ioctl)访问即可;这里以字符类设备为主,也包含其它设备的配置功能。 6 | 2. 映射方式进行数据处理的设备,这类主要在配置的基础上,需要进行大量数据流的处理;这里主要是GUI界面和摄像头采集输入,需要使用额外的映射接口管理显示。 7 | 3. 网络通讯的形式访问设备,主要包含以太网、CAN通讯、WIFI模块、BLE模块等,这类设备在经过初始化和配置后,对于应用层就是socket通讯,使用socket接口即可访问。 8 | 4. 直接以文件目录的形式访问,主要包含闪存、U盘、固态硬盘等,在系统中虚拟成存储结构,直接支持文件和文件读、写、删除等。 9 | 10 | ## next_chapter 11 | 12 | [返回目录](../README.md) 13 | 14 | 直接开始下一节说明: [基于网页的管理开发操作硬件实现](./ch04-07.web_design.md) 15 | -------------------------------------------------------------------------------- /src/ch04-10.lvgl_application.md: -------------------------------------------------------------------------------- 1 | # lvgl应用界面开发 2 | 3 | 4 | 5 | ## next_chapter 6 | 7 | [返回目录](../README.md) 8 | 9 | 直接开始下一节说明: [ffmpeg网络推流应用实现](./ch04-11.ffmpeg_webrtc.md) 10 | -------------------------------------------------------------------------------- /src/ch04-11.ffmpeg_webrtc.md: -------------------------------------------------------------------------------- 1 | # ffmpeg网络推流应用实现 2 | 3 | ## next_chapter 4 | 5 | [返回目录](../README.md) 6 | 7 | 直接开始下一节说明: [mqtt客户端服务](./ch04-12.mqtt_client.md) 8 | -------------------------------------------------------------------------------- /src/ch04-14.python_design.md: -------------------------------------------------------------------------------- 1 | # 使用python进行嵌入式Linux应用层开发 2 | 3 | ## next_chapter 4 | 5 | [返回目录](../README.md) 6 | 7 | 直接开始下一节说明: [基于v4l2的摄像头开发](./ch04-15.v4l2_opencv.md) 8 | -------------------------------------------------------------------------------- /src/ch04-16.integrated_design.md: -------------------------------------------------------------------------------- 1 | # 综合应用开发 2 | 3 | ## next_chapter 4 | 5 | [返回目录](../README.md) 6 | 7 | 直接开始下一节说明: [Linux平台基础api接口](./ch04-x1.linux_base_api.md) 8 | -------------------------------------------------------------------------------- /src/ch05.conclusion.md: -------------------------------------------------------------------------------- 1 | # 系统结语 2 | 3 | ## next_chapter 4 | 5 | [返回目录](../README.md) 6 | -------------------------------------------------------------------------------- /src/file/ch01-03/02.function.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 显示输入参数的函数 4 | function show_info() 5 | { 6 | i=1 7 | echo "var num:$#" 8 | echo "var str:$*" 9 | 10 | # 遍历输入参数 11 | echo -n "show loop nums: " 12 | while [ $i -le $# ]; do 13 | # ${!i} 表示取第i个输入参数的值 14 | echo -n "${!i} " 15 | let i++ 16 | done 17 | echo "" 18 | } 19 | show_info 4 5 6 7 8 9 20 | 21 | # 获取传参的和 22 | function sum_parameters() 23 | { 24 | local total=0 25 | 26 | for num in "$@"; do 27 | total=$((total + num)) 28 | done 29 | 30 | echo "$total" 31 | } 32 | result=$(sum_parameters 1 2 3 4 5) 33 | echo "result: $result" 34 | 35 | # fibo数列 36 | function fibo() 37 | { 38 | local fibo[0]=1 39 | local fibo[1]=1 40 | 41 | for ((i=2; i<$1; i++)); do 42 | fibo[i]=$((${fibo[i-1]} + ${fibo[i-2]})) 43 | done 44 | 45 | echo "${fibo[*]}" 46 | } 47 | fibo 10 -------------------------------------------------------------------------------- /src/file/ch01-03/03.math_logic.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 使用 $[] 或 $(( )) 进行数学运算 4 | a=$((2+5-3*2)) 5 | echo "a:$a" 6 | b=$((2**3 - 6/3)) 7 | echo "b:$b" 8 | a=$((b++)) 9 | echo "a:$a b:$b" 10 | a=$((b%a)) 11 | echo "a:$a b:$b" 12 | c1=$[$[a==b] || $[a test/test.txt << EOF 6 | 这是测试文件! 7 | EOF 8 | 9 | echo "-------------------------------------" 10 | 11 | echo "pipe write into file!" 12 | ls -alF | sort > test/test.txt 13 | 14 | # 将date的输出写入testfile 15 | date > test/testfile 16 | 17 | # 将date的输出重定向追加到testfile后 18 | date >> test/testfile 19 | 20 | # 基于文件中转的命令 21 | ls -alF >> test/testfile 22 | sort < test/testfile 23 | 24 | # 使用管道的连续命令 25 | ls -alF | sort 26 | 27 | # 显示当前进程,排序,然后分页显示 28 | ps | sort | more 29 | 30 | # 读取file1, 排序内容,删除重复后写入mydata.txt 31 | cat test/testfile.txt | sort | uniq > test/mydata.txt 32 | 33 | echo "-------------------------------------" 34 | echo "### redirection ###" 35 | 36 | # 将标准输出和错误输出定向到不同文件 37 | # 标准输出重定向不带数字 38 | # 错误输出重定向使用格式:"cmd 2>err.file" 39 | ls -l /etc/hosts test/nofile > test/test.log 2> test/err.log 40 | 41 | # 将标准输出和错误输出定向到同一文件(&>不追加,&>>追加) 42 | ls -l /etc/hosts test/nofile &> err2.log 43 | 44 | # 将错误处理导向标准输入通道,从而写入标准输出文件 45 | ls test/nofile > test/1.txt 2>&1 46 | 47 | # 将信息导入到/dev/null中 48 | ls test/nofile &> /dev/null 49 | 50 | # 将testfile用wc处理 51 | wc test/test.file << EOF 54 | this is a test! 55 | this is the next lines! 56 | EOF -------------------------------------------------------------------------------- /src/file/ch01-03/05.loop_branch.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo "-------------------------------------" 4 | echo "### loop ###" 5 | fruits=("苹果" "香蕉" "柚子" "草莓") 6 | for fruit in "${fruits[@]}"; do 7 | echo "i love ${fruit}" 8 | if [ ${fruit} == "柚子" ]; then 9 | break 10 | fi 11 | done 12 | 13 | num=12 14 | fibo=(1 1) 15 | for ((i=2;i<=$num;i++)) 16 | do 17 | let fibo[$i]=fibo[$i-1]+fibo[$i-2] 18 | done 19 | echo "${fibo[@]}" 20 | 21 | count=1 22 | while [ ${count} -le 3 ]; do 23 | echo -n "${count} " 24 | count=$((count+1)) 25 | done 26 | echo ${count} 27 | 28 | count=0 29 | until [ $count -ge 3 ]; do 30 | echo -n "${count} " 31 | let count++ 32 | done 33 | 34 | echo "-------------------------------------" 35 | echo "### branch ###" 36 | # 检测目录是否在PATH中 37 | if [ -d "$1" ] && echo $PATH | grep -E -q "(^|:)$1($|:)"; then 38 | echo "directory $1 in PATH" 39 | else 40 | echo "directory $1 not in PATH" 41 | fi 42 | 43 | # 可以使用if test condition, 等同于 if [ condition ] 44 | if test -f "test/file.c"; then 45 | echo "file exist!" 46 | fi 47 | 48 | # 使用if...elif..else结构 49 | timeofday=1 50 | if [ "$timeofday" == "0" ]; then 51 | echo "morning" 52 | elif [ "$timeofday" == "1" ]; then 53 | echo "afternoon" 54 | else 55 | echo "sorry" 56 | exit 1 57 | fi 58 | 59 | case $timeofday in 60 | "0") 61 | echo "morning" 62 | ;; 63 | "1") 64 | echo "afternoon" 65 | ;; 66 | *) 67 | echo "sorry" 68 | exit 1 69 | ;; 70 | esac 71 | 72 | -------------------------------------------------------------------------------- /src/file/ch01-03/err2.log: -------------------------------------------------------------------------------- 1 | ls: cannot access 'test/nofile': No such file or directory 2 | -rw-r--r-- 1 root root 460 Oct 22 14:49 /etc/hosts 3 | -------------------------------------------------------------------------------- /src/file/ch01-03/system_info.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | local_time=$(date +"%Y%m%d %H:%M:%S") 4 | local_ip=$(ifconfig eth0 | grep netmask | tr -s " " | cut -d" " -f3) 5 | free_mem=$(cat /proc/meminfo | grep MemFree | tr -s " " | cut -d" " -f2) 6 | free_disk=$(df | grep "/$" | tr -s " " | cut -d " " -f4) 7 | cpu_loading=$(cat /proc/loadavg | cut -d" " -f3) 8 | login_user=$(who | cut -d" " -f1) 9 | procs=$(ps aux | wc -l) 10 | irq=$(vmstat 1 2 | tail -n +4 | tr -s " " | cut -d " " -f12) 11 | cs=$(vmstat 1 2 | tail -n +4 | tr -s " " | cut -d " " -f13) 12 | usertime=$(vmstat 1 2 | tail -n +4 | tr -s " " | cut -d " " -f14) 13 | systime=$(vmstat 1 2 | tail -n +4 | tr -s " " | cut -d " " -f15) 14 | iowait=$(vmstat 1 2 | tail -n +4 | tr -s " " | cut -d " " -f17) 15 | -------------------------------------------------------------------------------- /src/file/ch01-03/test/1.txt: -------------------------------------------------------------------------------- 1 | ls: cannot access 'test/nofile': No such file or directory 2 | -------------------------------------------------------------------------------- /src/file/ch01-03/test/err.log: -------------------------------------------------------------------------------- 1 | ls: cannot access 'test/nofile': No such file or directory 2 | -------------------------------------------------------------------------------- /src/file/ch01-03/test/file.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/file/ch01-03/test/file.c -------------------------------------------------------------------------------- /src/file/ch01-03/test/mydata.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/file/ch01-03/test/mydata.txt -------------------------------------------------------------------------------- /src/file/ch01-03/test/test.file: -------------------------------------------------------------------------------- 1 | this is a test! 2 | this is the next lines! 3 | -------------------------------------------------------------------------------- /src/file/ch01-03/test/test.log: -------------------------------------------------------------------------------- 1 | -rw-r--r-- 1 root root 460 Oct 22 14:49 /etc/hosts 2 | -------------------------------------------------------------------------------- /src/file/ch01-03/test/test.txt: -------------------------------------------------------------------------------- 1 | drwxrwxrwx 1 freedom freedom 4096 Jul 30 10:15 ../ 2 | drwxrwxrwx 1 freedom freedom 4096 Oct 22 11:52 ./ 3 | drwxrwxrwx 1 freedom freedom 4096 Oct 22 14:50 test/ 4 | -rwxrwxrwx 1 freedom freedom 110 Oct 22 14:53 err2.log* 5 | -rwxrwxrwx 1 freedom freedom 1251 Oct 22 12:22 05.loop_branch.sh* 6 | -rwxrwxrwx 1 freedom freedom 1358 Oct 22 14:54 04.file_remap.sh* 7 | -rwxrwxrwx 1 freedom freedom 2786 Oct 22 11:51 01.shell_var.sh* 8 | -rwxrwxrwx 1 freedom freedom 673 Jun 24 08:33 system_info.sh* 9 | -rwxrwxrwx 1 freedom freedom 748 Oct 22 11:52 02.function.sh* 10 | -rwxrwxrwx 1 freedom freedom 890 Oct 22 11:52 03.math_logic.sh* 11 | total 20 12 | -------------------------------------------------------------------------------- /src/file/ch01-03/test/testfile: -------------------------------------------------------------------------------- 1 | Wed Oct 22 02:54:04 PM CST 2025 2 | Wed Oct 22 02:54:04 PM CST 2025 3 | total 20 4 | drwxrwxrwx 1 freedom freedom 4096 Oct 22 11:52 ./ 5 | drwxrwxrwx 1 freedom freedom 4096 Jul 30 10:15 ../ 6 | -rwxrwxrwx 1 freedom freedom 2786 Oct 22 11:51 01.shell_var.sh* 7 | -rwxrwxrwx 1 freedom freedom 748 Oct 22 11:52 02.function.sh* 8 | -rwxrwxrwx 1 freedom freedom 890 Oct 22 11:52 03.math_logic.sh* 9 | -rwxrwxrwx 1 freedom freedom 1358 Oct 22 14:54 04.file_remap.sh* 10 | -rwxrwxrwx 1 freedom freedom 1251 Oct 22 12:22 05.loop_branch.sh* 11 | -rwxrwxrwx 1 freedom freedom 110 Oct 22 14:53 err2.log* 12 | -rwxrwxrwx 1 freedom freedom 673 Jun 24 08:33 system_info.sh* 13 | drwxrwxrwx 1 freedom freedom 4096 Oct 22 14:50 test/ 14 | -------------------------------------------------------------------------------- /src/file/ch01-06/runscript.sh: -------------------------------------------------------------------------------- 1 | runpath=$(pwd) 2 | 3 | titlestr="Choose Run Script" 4 | backtitle="Remote Manage building script" 5 | menustr="" 6 | TTY_X=$(($(stty size | awk '{print $2}')-6)) # determine terminal width 7 | TTY_Y=$(($(stty size | awk '{print $1}')-6)) # determine terminal height 8 | 9 | options+=("prepare" "prepare for enviroment") 10 | options+=("uboot" "build for uboot") 11 | options+=("kernel" "build for kernel") 12 | options+=("rootfs" "build for rootfs") 13 | options+=("application" "build for application") 14 | 15 | CONF_DIR=$(whiptail --title "${titlestr}" --backtitle "${backtitle}" --notags \ 16 | --menu "${menustr}" "${TTY_Y}" "${TTY_X}" $((TTY_Y - 8)) \ 17 | --cancel-button Exit --ok-button Select "${options[@]}" \ 18 | 3>&1 1>&2 2>&3) 19 | echo $CONF_DIR 20 | [[ -z $CONF_DIR ]] && exit 21 | 22 | case "${CONF_DIR}" in 23 | "prepare") 24 | ${runpath}/preBuildEnvironment.sh 25 | ;; 26 | "uboot") 27 | SysBuildUboot 28 | cd ${runpath} 29 | ;; 30 | esac -------------------------------------------------------------------------------- /src/file/ch01-06/testfile: -------------------------------------------------------------------------------- 1 | Wed Dec 6 09:57:46 CST 2023 2 | Wed Dec 6 09:59:56 CST 2023 3 | total 20 4 | drwxrwxrwx 1 freedom freedom 4096 Dec 6 09:57 ./ 5 | drwxrwxrwx 1 freedom freedom 4096 Dec 1 14:36 ../ 6 | -rwxrwxrwx 1 freedom freedom 5679 Dec 1 14:35 preBuildEnvironment.sh* 7 | -rwxrwxrwx 1 freedom freedom 3895 Nov 28 08:07 pull_build_linux_software.sh* 8 | -rwxrwxrwx 1 freedom freedom 885 Dec 4 16:50 runscript.sh* 9 | -rwxrwxrwx 1 freedom freedom 1364 Dec 6 09:54 test.sh* 10 | -rwxrwxrwx 1 freedom freedom 58 Dec 6 09:59 testfile* 11 | -------------------------------------------------------------------------------- /src/file/ch02-01/01.hello/build.sh: -------------------------------------------------------------------------------- 1 | # 预编译 2 | echo "precompile..." 3 | gcc -E hello.c -o hello.i # 生成去掉额外信息的中间文件 4 | 5 | # 编译 6 | echo "compile..." 7 | gcc -S hello.i -o hello.s # 中间文件生成汇编文件 8 | 9 | # 汇编 10 | echo "assemble..." 11 | gcc -c hello.s -o hello.o # 生成目标平台的指令链接文件 12 | 13 | # 链接 14 | echo "link..." 15 | gcc -s hello.o -o hello # 将文件链接,构建目标平台的可执行文件 16 | 17 | echo "run..." 18 | ./hello 19 | 20 | # 一步生成可执行文件 21 | echo "one step..." 22 | gcc hello.c -o hello_next 23 | 24 | echo "run..." 25 | ./hello_next 26 | 27 | rm hello hello.i hello.s hello.o hello_next -------------------------------------------------------------------------------- /src/file/ch02-01/01.hello/hello.c: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | 4 | int main(int argc, char *argv[]) 5 | { 6 | printf("Hello, world!\n"); 7 | return 0; 8 | } 9 | -------------------------------------------------------------------------------- /src/file/ch02-01/02.basic/Makefile: -------------------------------------------------------------------------------- 1 | # step1: make查找all标签,并执行target. 2 | all : target 3 | 4 | # step2: 查找target标签,执行hello/hello.o,main.o. 5 | target:hello/hello.o main.o 6 | # step5: 链接文件,生成可执行文件 7 | gcc -o target hello/hello.o main.o 8 | 9 | # step3: 执行hello.o标签,查找hello.c文件,执行下述命令 10 | hello/hello.o:hello/hello.c 11 | gcc -I"hello/" -c hello/hello.c -o hello/hello.o 12 | 13 | # step4: 执行main.o标签,查找main.c文件,执行下述命令,生成链接文件 14 | main.o:main.c 15 | gcc -I"hello/" -c main.c -o main.o 16 | 17 | clean: 18 | rm -rf target 19 | rm -rf hello/hello.o main.o -------------------------------------------------------------------------------- /src/file/ch02-01/02.basic/hello/hello.c: -------------------------------------------------------------------------------- 1 | 2 | #include "hello.h" 3 | 4 | void print_hello(void) 5 | { 6 | printf("Hello, world!\n"); 7 | } -------------------------------------------------------------------------------- /src/file/ch02-01/02.basic/hello/hello.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef HELLO_H 3 | #define HELLO_H 4 | 5 | #include 6 | 7 | void print_hello(void); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/file/ch02-01/02.basic/main.c: -------------------------------------------------------------------------------- 1 | 2 | #include "hello.h" 3 | 4 | int main() 5 | { 6 | print_hello(); 7 | return 0; 8 | } -------------------------------------------------------------------------------- /src/file/ch02-01/03.detect/Makefile: -------------------------------------------------------------------------------- 1 | # variable 2 | # 定义编译的生成可执行文件名 3 | EXCUTABLE ?= target 4 | 5 | # 包含链接的所有文件 6 | OBJECTS = hello/hello.o main.o 7 | 8 | # 包含需要访问的文件头目录 9 | INCLUDE_PATH = -I"hello/" 10 | 11 | # 指定编译选项 12 | CFLAGS += -O1 -lm 13 | 14 | # 指定编译器 15 | CC ?= gcc 16 | 17 | all : $(EXCUTABLE) 18 | 19 | #自动化变量,匹配所有的.c生成的链接文件 20 | #等同于上述的main.o:main.c和hello/hello.o:hello/hello.c标签 21 | %.o : %.c 22 | $(CC) $(INCLUDE_PATH) $(CFLAGS) -c $< -o $@ 23 | 24 | #生成可执行文件 25 | #等同于上述target:hello/hello.o main.o标签 26 | $(EXCUTABLE):$(OBJECTS) 27 | $(CC) -o $(EXCUTABLE) $(OBJECTS) $(CFLAGS) 28 | 29 | clean: 30 | rm -rf $(EXCUTABLE) 31 | rm -rf $(OBJECTS) 32 | -------------------------------------------------------------------------------- /src/file/ch02-01/03.detect/hello/hello.c: -------------------------------------------------------------------------------- 1 | 2 | #include "hello.h" 3 | 4 | void print_hello(void) 5 | { 6 | printf("Hello, world!\n"); 7 | } -------------------------------------------------------------------------------- /src/file/ch02-01/03.detect/hello/hello.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef HELLO_H 3 | #define HELLO_H 4 | 5 | #include 6 | 7 | void print_hello(void); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/file/ch02-01/03.detect/main.c: -------------------------------------------------------------------------------- 1 | 2 | #include "hello.h" 3 | 4 | int main() 5 | { 6 | print_hello(); 7 | return 0; 8 | } -------------------------------------------------------------------------------- /src/file/ch02-01/04.include/Makefile: -------------------------------------------------------------------------------- 1 | 2 | OBJECTS := main.o test.o 3 | EXCUTABLE := target 4 | 5 | include build.mk 6 | -------------------------------------------------------------------------------- /src/file/ch02-01/04.include/build.mk: -------------------------------------------------------------------------------- 1 | # 全局变量 2 | CROSS_COMPILE ?= 3 | EXCUTABLE ?= 4 | OBJECTS ?= 5 | INCLUDE_PATH ?= 6 | CC ?=$(CROSS_COMPILE)gcc 7 | CCPLUS ?=$(CROSS_COMPILE)g++ 8 | CFLAGS ?= 9 | CCFLAGS ?= 10 | INCLUDE_PATH ?= 11 | 12 | all : $(EXCUTABLE) 13 | 14 | %.o : %.c 15 | $(CC) $(INCLUDE_PATH) $(CFLAGS) -c $< -o $@ 16 | 17 | %.o : %.cpp 18 | $(CCPLUS) $(INCLUDE_PATH) $(CCFLAGS) -c $< -o $@ 19 | 20 | $(EXCUTABLE):$(OBJECTS) 21 | $(CCPLUS) -o $(EXCUTABLE) $(OBJECTS) $(CCFLAGS) 22 | 23 | clean: 24 | rm -rf $(EXCUTABLE) 25 | rm -rf $(OBJECTS) 26 | -------------------------------------------------------------------------------- /src/file/ch02-01/04.include/main.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include "test.h" 3 | 4 | int main(int argc, char *argv[]) 5 | { 6 | printf("Hello, world!\n"); 7 | 8 | print_test(); 9 | return 0; 10 | } 11 | -------------------------------------------------------------------------------- /src/file/ch02-01/04.include/test.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include "test.h" 3 | 4 | void print_test(void) 5 | { 6 | printf("test cpp"); 7 | } -------------------------------------------------------------------------------- /src/file/ch02-01/04.include/test.h: -------------------------------------------------------------------------------- 1 | #ifndef __TEST_H 2 | #define __TEST_H 3 | 4 | #ifdef __cplusplus 5 | extern "C" 6 | { 7 | #endif 8 | 9 | void print_test(void); 10 | 11 | #ifdef __cplusplus 12 | } 13 | #endif 14 | 15 | #endif 16 | -------------------------------------------------------------------------------- /src/file/ch02-01/05.static_lib/Makefile: -------------------------------------------------------------------------------- 1 | # 全局变量 2 | EXCUTABLE ?= target 3 | OBJECTS = main.o 4 | CC ?= gcc 5 | STATIC_LIB ?= lib/libobj.a 6 | 7 | all : $(EXCUTABLE) 8 | 9 | #自动化变量,匹配所有的.c生成的链接文件 10 | %.o : %.c 11 | $(CC) -c $< -o $@ 12 | 13 | # 生成可执行文件 14 | $(EXCUTABLE):$(OBJECTS) 15 | $(CC) -o $(EXCUTABLE) $(OBJECTS) $(STATIC_LIB) 16 | 17 | clean: 18 | rm -rf $(EXCUTABLE) 19 | rm -rf $(OBJECTS) 20 | -------------------------------------------------------------------------------- /src/file/ch02-01/05.static_lib/lib/Makefile: -------------------------------------------------------------------------------- 1 | # 全局变量 2 | lib-obj = libobj.a 3 | lib-obj-src = lib_obj1.o lib_obj2.o 4 | AR = ar 5 | CC = gcc 6 | 7 | all: $(lib-obj) 8 | 9 | # 自动化变量,编译.c文件 10 | %.o:%.c 11 | $(CC) -c $< -o $@ 12 | 13 | # 静态库编译 14 | $(lib-obj):$(lib-obj-src) 15 | $(AR) -cr $(lib-obj) $(lib-obj-src) 16 | 17 | clean: 18 | rm -rf $(lib-obj) 19 | rm -rf $(lib-obj-src) 20 | -------------------------------------------------------------------------------- /src/file/ch02-01/05.static_lib/lib/build.sh: -------------------------------------------------------------------------------- 1 | # 编译生成静态库 2 | # 将C文件编译为中间文件 3 | echo "compile..." 4 | gcc -c lib_obj1.c -o lib_obj1.o 5 | gcc -c lib_obj2.c -o lib_obj2.o 6 | 7 | # 通过ar文件打包中间文件生成lib文件 8 | echo "ar pack..." 9 | ar -cr libobj.a lib_obj1.o lib_obj2.o -------------------------------------------------------------------------------- /src/file/ch02-01/05.static_lib/lib/lib_obj1.c: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | 4 | void print_lib_obj1(void) 5 | { 6 | printf("lib_obj1.c\n"); 7 | } 8 | -------------------------------------------------------------------------------- /src/file/ch02-01/05.static_lib/lib/lib_obj2.c: -------------------------------------------------------------------------------- 1 | 2 | 3 | #include 4 | 5 | void print_lib_obj2(void) 6 | { 7 | printf("lib_obj2.c\n"); 8 | } 9 | -------------------------------------------------------------------------------- /src/file/ch02-01/05.static_lib/main.c: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | 4 | extern void print_lib_obj1(void); 5 | extern void print_lib_obj2(void); 6 | 7 | int main(int argc, char *argv[]) 8 | { 9 | printf("Hello, World!\n"); 10 | 11 | print_lib_obj1(); 12 | 13 | print_lib_obj2(); 14 | 15 | return 0; 16 | } 17 | -------------------------------------------------------------------------------- /src/file/ch02-01/06.dynamic_lib/Makefile: -------------------------------------------------------------------------------- 1 | # 全局变量 2 | EXCUTABLE ?= target 3 | OBJECTS = main.o 4 | CC ?= gcc 5 | CFLAGS ?= -Llib/ -lobj 6 | 7 | all : $(EXCUTABLE) 8 | 9 | #自动化变量,匹配所有的.c生成的链接文件 10 | %.o : %.c 11 | $(CC) -c $< -o $@ 12 | 13 | # 生成可执行文件 14 | $(EXCUTABLE):$(OBJECTS) 15 | $(CC) -o $(EXCUTABLE) $(OBJECTS) $(CFLAGS) 16 | 17 | clean: 18 | rm -rf $(EXCUTABLE) 19 | rm -rf $(OBJECTS) 20 | -------------------------------------------------------------------------------- /src/file/ch02-01/06.dynamic_lib/lib/Makefile: -------------------------------------------------------------------------------- 1 | # 全局变量 2 | lib-obj = libobj.so 3 | lib-obj-src = lib_obj1.o lib_obj2.o 4 | CC = gcc 5 | 6 | all: $(lib-obj) 7 | 8 | # 自动化变量,编译.c文件 9 | %.o:%.c 10 | $(CC) -c $< -o $@ 11 | 12 | # 动态库编译 13 | $(lib-obj):$(lib-obj-src) 14 | $(CC) $(lib-obj-src) -fPIC -shared -o $(lib-obj) 15 | 16 | clean: 17 | rm -rf $(lib-obj) 18 | rm -rf $(lib-obj-src) 19 | -------------------------------------------------------------------------------- /src/file/ch02-01/06.dynamic_lib/lib/build.sh: -------------------------------------------------------------------------------- 1 | # 编译生成动态库 2 | # 将C文件编译为中间文件 3 | echo "compile..." 4 | gcc -c lib_obj1.c -o lib_obj1.o 5 | gcc -c lib_obj2.c -o lib_obj2.o 6 | 7 | # 将C++文件编译为动态库 8 | # -fPIC 选项指示编译器生成位置无关的代码(Position Independent Code),即动态库文件 9 | echo "link..." 10 | gcc lib_obj1.o lib_obj2.o -fPIC -shared -o libobj.so 11 | -------------------------------------------------------------------------------- /src/file/ch02-01/06.dynamic_lib/lib/lib_obj1.c: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | 4 | void print_lib_obj1(void) 5 | { 6 | printf("lib_obj1.c\n"); 7 | } 8 | -------------------------------------------------------------------------------- /src/file/ch02-01/06.dynamic_lib/lib/lib_obj2.c: -------------------------------------------------------------------------------- 1 | 2 | 3 | #include 4 | 5 | void print_lib_obj2(void) 6 | { 7 | printf("lib_obj2.c\n"); 8 | } 9 | -------------------------------------------------------------------------------- /src/file/ch02-01/06.dynamic_lib/main.c: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | 4 | extern void print_lib_obj1(void); 5 | extern void print_lib_obj2(void); 6 | 7 | int main(int argc, char *argv[]) 8 | { 9 | printf("Hello, World!\n"); 10 | 11 | print_lib_obj1(); 12 | 13 | print_lib_obj2(); 14 | 15 | return 0; 16 | } 17 | -------------------------------------------------------------------------------- /src/file/ch02-01/07.extend/Makefile: -------------------------------------------------------------------------------- 1 | CUR_DIR := $(shell "pwd") 2 | INC_DIR := $(addsuffix /inc,$(CUR_DIR)) 3 | SRC := $(wildcard $(CUR_DIR)/*.c) 4 | OBJ := $(patsubst %.c,%.o,$(notdir $(SRC))) 5 | CC := gcc 6 | CFLAGS := -Wall -I$(INC_DIR) 7 | 8 | all: target 9 | 10 | %.o : %.c 11 | $(CC) $(CFLAGS) -c $< -o $@ 12 | 13 | target: $(OBJ) 14 | $(CC) $^ -o $@ 15 | 16 | clean: 17 | rm -rf $(OBJ) -------------------------------------------------------------------------------- /src/file/ch02-01/07.extend/main.c: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | 4 | extern void test(void); 5 | 6 | int main(void) 7 | { 8 | test(); 9 | 10 | return 0; 11 | } -------------------------------------------------------------------------------- /src/file/ch02-01/07.extend/test.c: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | 4 | void test(void) 5 | { 6 | printf("test run\n"); 7 | } -------------------------------------------------------------------------------- /src/file/ch02-01/08.integrated/application.cpp: -------------------------------------------------------------------------------- 1 | 2 | #include "application.hpp" 3 | #include 4 | 5 | using namespace std; 6 | 7 | void application_run(void) 8 | { 9 | printf("hello world!\r\n"); 10 | } -------------------------------------------------------------------------------- /src/file/ch02-01/08.integrated/application.hpp: -------------------------------------------------------------------------------- 1 | #ifndef _APPLICATION_H 2 | #define _APPLICATION_H 3 | 4 | #ifdef __cplusplus 5 | extern "C" { 6 | #endif 7 | 8 | void application_run(void); 9 | 10 | #ifdef __cplusplus 11 | } 12 | #endif 13 | 14 | #endif 15 | -------------------------------------------------------------------------------- /src/file/ch02-01/08.integrated/dynamic_test.cpp: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | 4 | void dynamic_test(void) 5 | { 6 | printf("dynamic_test\r\n"); 7 | } 8 | -------------------------------------------------------------------------------- /src/file/ch02-01/08.integrated/main.cpp: -------------------------------------------------------------------------------- 1 | #include "application.hpp" 2 | #include 3 | 4 | extern void static_test(void); 5 | extern void dynamic_test(void); 6 | 7 | int main(void) 8 | { 9 | printf("hello world!\r\n"); 10 | 11 | application_run(); 12 | 13 | static_test(); 14 | 15 | dynamic_test(); 16 | 17 | return 0; 18 | } -------------------------------------------------------------------------------- /src/file/ch02-01/08.integrated/static_test.cpp: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | 4 | void static_test(void) 5 | { 6 | printf("static_test\r\n"); 7 | } 8 | -------------------------------------------------------------------------------- /src/file/ch02-02/config1/Makefile: -------------------------------------------------------------------------------- 1 | CXX = g++ 2 | CXXFLAGS ?= -std=c++11 3 | INCLUDES := 4 | BUILD := run 5 | LOCAL = $(shell pwd) 6 | 7 | # 通过CONFIG控制模块是否最终加入编译选项 8 | CONFIG_FILE1 = y 9 | CONFIG_FILE2 = n 10 | # CONFIG_FILE3 不存在 11 | 12 | # 配置项 13 | obj-y := main.o 14 | obj-${CONFIG_FILE1} += file1.o 15 | obj-${CONFIG_FILE2} += file2.o 16 | obj-${CONFIG_FILE3} += file3.o 17 | 18 | $(info y:${obj-y}, n:${obj-n}, null:${obj-}) 19 | 20 | %.o : %.cpp 21 | $(CXX) $(CXXFLAGS) -c $< -o $@ $(INCLUDES) 22 | 23 | all: $(obj-y) 24 | $(CXX) $(CXXFLAGS) $(obj-y) -o $(BUILD) 25 | 26 | clean: 27 | rm -rf $(obj-y) 28 | rm -rf $(BUILD) -------------------------------------------------------------------------------- /src/file/ch02-02/config1/file1.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | void file1_test(void) 4 | { 5 | std::cout << "file1_test" << std::endl; 6 | } -------------------------------------------------------------------------------- /src/file/ch02-02/config1/file2.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | void file2_test(void) 4 | { 5 | std::cout << "file2_test" << std::endl; 6 | } -------------------------------------------------------------------------------- /src/file/ch02-02/config1/file3.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | void file3_test(void) 4 | { 5 | std::cout << "file3_test" << std::endl; 6 | } -------------------------------------------------------------------------------- /src/file/ch02-02/config1/main.cpp: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | 4 | int main(int argc, const char *argv[]) 5 | { 6 | std::cout << "Hello World!" << std::endl; 7 | return 0; 8 | } -------------------------------------------------------------------------------- /src/file/ch02-02/config1/run: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/file/ch02-02/config1/run -------------------------------------------------------------------------------- /src/file/ch02-03/uboot-imx-lf_v2022.04-patch/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/file/ch02-03/uboot-imx-lf_v2022.04-patch/README.md -------------------------------------------------------------------------------- /src/file/ch02-03/uboot-imx-lf_v2022.04-patch/arch/arm/dts/imx6ull-14x14-rmk-emmc.dts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 NXP 3 | * 4 | * This program is free software; you can redistribute it and/or 5 | * modify it under the terms of the GNU General Public License 6 | * as published by the Free Software Foundation; either version 2 7 | * of the License, or (at your option) any later version. 8 | */ 9 | /dts-v1/; 10 | 11 | #include "imx6ull.dtsi" 12 | #include "imx6ul-14x14-rmk.dtsi" 13 | 14 | / { 15 | model = "i.MX6 ULL 14x14 RMK Board"; 16 | compatible = "fsl,imx6ull-14x14-rmk", "fsl,imx6ull"; 17 | }; 18 | 19 | &{/aliases} { 20 | u-boot,dm-pre-reloc; 21 | display0 = &lcdif; 22 | }; 23 | 24 | &{/soc} { 25 | u-boot,dm-pre-reloc; 26 | }; 27 | 28 | &aips2 { 29 | u-boot,dm-pre-reloc; 30 | }; 31 | 32 | &iomuxc { 33 | u-boot,dm-pre-reloc; 34 | }; 35 | 36 | &clks { 37 | assigned-clocks = <&clks IMX6UL_CLK_PLL3_PFD2>; 38 | assigned-clock-rates = <320000000>; 39 | }; 40 | 41 | &usdhc2 { 42 | pinctrl-names = "default", "state_100mhz", "state_200mhz"; 43 | pinctrl-0 = <&pinctrl_usdhc2_8bit>; 44 | pinctrl-1 = <&pinctrl_usdhc2_8bit_100mhz>; 45 | pinctrl-2 = <&pinctrl_usdhc2_8bit_200mhz>; 46 | bus-width = <8>; 47 | non-removable; 48 | status = "okay"; 49 | }; 50 | 51 | -------------------------------------------------------------------------------- /src/file/ch02-03/uboot-imx-lf_v2022.04-patch/arch/arm/dts/imx6ull-14x14-rmk-gpmi-weim.dts: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0 2 | // 3 | // Copyright (C) 2016 Freescale Semiconductor, Inc. 4 | 5 | #include "imx6ull-14x14-evk.dts" 6 | 7 | &gpmi { 8 | pinctrl-names = "default"; 9 | pinctrl-0 = <&pinctrl_gpmi_nand_1>; 10 | status = "okay"; 11 | nand-on-flash-bbt; 12 | fsl,use-minimum-ecc; 13 | }; 14 | 15 | &iomuxc { 16 | pinctrl_gpmi_nand_1: gpmi-nand-1 { 17 | fsl,pins = < 18 | MX6UL_PAD_NAND_CLE__RAWNAND_CLE 0xb0b1 19 | MX6UL_PAD_NAND_ALE__RAWNAND_ALE 0xb0b1 20 | MX6UL_PAD_NAND_WP_B__RAWNAND_WP_B 0xb0b1 21 | MX6UL_PAD_NAND_READY_B__RAWNAND_READY_B 0xb000 22 | MX6UL_PAD_NAND_CE0_B__RAWNAND_CE0_B 0xb0b1 23 | MX6UL_PAD_NAND_CE1_B__RAWNAND_CE1_B 0xb0b1 24 | MX6UL_PAD_NAND_RE_B__RAWNAND_RE_B 0xb0b1 25 | MX6UL_PAD_NAND_WE_B__RAWNAND_WE_B 0xb0b1 26 | MX6UL_PAD_NAND_DATA00__RAWNAND_DATA00 0xb0b1 27 | MX6UL_PAD_NAND_DATA01__RAWNAND_DATA01 0xb0b1 28 | MX6UL_PAD_NAND_DATA02__RAWNAND_DATA02 0xb0b1 29 | MX6UL_PAD_NAND_DATA03__RAWNAND_DATA03 0xb0b1 30 | MX6UL_PAD_NAND_DATA04__RAWNAND_DATA04 0xb0b1 31 | MX6UL_PAD_NAND_DATA05__RAWNAND_DATA05 0xb0b1 32 | MX6UL_PAD_NAND_DATA06__RAWNAND_DATA06 0xb0b1 33 | MX6UL_PAD_NAND_DATA07__RAWNAND_DATA07 0xb0b1 34 | >; 35 | }; 36 | }; 37 | 38 | &qspi { 39 | status = "disabled"; 40 | }; 41 | 42 | &usdhc2 { 43 | status = "disabled"; 44 | }; 45 | -------------------------------------------------------------------------------- /src/file/ch02-03/uboot-imx-lf_v2022.04-patch/board/freescale/mx6ullrmk/Kconfig: -------------------------------------------------------------------------------- 1 | if TARGET_MX6ULL_14X14_RMK || TARGET_MX6ULL_9X9_EVK 2 | 3 | config SYS_BOARD 4 | default "mx6ullrmk" 5 | 6 | config SYS_VENDOR 7 | default "freescale" 8 | 9 | config SYS_CONFIG_NAME 10 | default "mx6ullrmk" 11 | 12 | config IMX_CONFIG 13 | default "board/freescale/mx6ullrmk/imximage.cfg" 14 | 15 | config SYS_TEXT_BASE 16 | default 0x87800000 17 | endif 18 | -------------------------------------------------------------------------------- /src/file/ch02-03/uboot-imx-lf_v2022.04-patch/board/freescale/mx6ullrmk/MAINTAINERS: -------------------------------------------------------------------------------- 1 | MX6ULLEVK BOARD 2 | M: Peng Fan 3 | S: Maintained 4 | F: board/freescale/mx6ullrmk/ 5 | F: include/configs/mx6ullrmk.h 6 | F: configs/mx6ull_14x14_rmk_defconfig 7 | F: configs/mx6ull_14x14_rmk_plugin_defconfig 8 | F: configs/mx6ulz_14x14_evk_defconfig 9 | -------------------------------------------------------------------------------- /src/file/ch02-03/uboot-imx-lf_v2022.04-patch/board/freescale/mx6ullrmk/Makefile: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: GPL-2.0+ 2 | # (C) Copyright 2016 Freescale Semiconductor, Inc. 3 | 4 | obj-y := mx6ullrmk.o 5 | -------------------------------------------------------------------------------- /src/file/ch02-03/uboot-imx-lf_v2022.04-patch/rmk_build_emmc.sh: -------------------------------------------------------------------------------- 1 | make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf- mx6ull_14x14_rmk_emmc_defconfig 2 | make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf- -j6 3 | -------------------------------------------------------------------------------- /src/file/ch02-03/uboot-imx-lf_v2022.04-patch/uboot_upgrade.sh: -------------------------------------------------------------------------------- 1 | 2 | PLATFORM_BOOT=$(pwd) 3 | 4 | #SRC_DIR=${SUPPORT_ENV_BOOT_DIR} 5 | #DST_DIR=${PLATFORM_BOOT} 6 | SRC_DIR=${PLATFORM_BOOT} 7 | DST_DIR=${SUPPORT_ENV_BOOT_DIR} 8 | 9 | echo "start copy u-boot patch..." 10 | 11 | #configs 12 | cp -fv ${SRC_DIR}/configs/* ${DST_DIR}/configs/ 13 | 14 | #dts 15 | cp -fv ${SRC_DIR}/arch/arm/dts/* ${DST_DIR}/arch/arm/dts/ 16 | cp -fv ${SRC_DIR}/arch/arm/mach-imx/mx6/Kconfig ${DST_DIR}/arch/arm/mach-imx/mx6/ 17 | 18 | #drivers 19 | cp -fv ${SRC_DIR}/drivers/net/phy/phy.c ${DST_DIR}/drivers/net/phy/ 20 | 21 | #include 22 | cp -fv ${SRC_DIR}/include/configs/mx6ullrmk.h ${DST_DIR}/include/configs/ 23 | 24 | #board 25 | if [ ! -d ${DST_DIR}/board/freescale/mx6ullrmk/ ]; then 26 | mkdir -p ${DST_DIR}/board/freescale/mx6ullrmk 27 | fi 28 | cp -rfv ${SRC_DIR}/board/freescale/mx6ullrmk/* ${DST_DIR}/board/freescale/mx6ullrmk/ 29 | 30 | #configs 31 | if [ ! -d "${DST_DIR}/.vscode" ]; then 32 | mkdir -p "${DST_DIR}/.vscode" 33 | fi 34 | cp -rv ${SRC_DIR}/.vscode/settings.json ${DST_DIR}/.vscode/ 35 | 36 | #build 37 | sudo chmod 777 rmk_build_emmc.sh 38 | cp -rv ${SRC_DIR}/rmk_build_emmc.sh ${DST_DIR}/ 39 | 40 | echo "end copy u-boot patch, success!" 41 | sleep 1 -------------------------------------------------------------------------------- /src/file/ch02-03/uboot.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/file/ch02-03/uboot.xlsx -------------------------------------------------------------------------------- /src/file/ch02-06/imx6ull-14x14-nand-4.3-800x480-c.dts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2016 Freescale Semiconductor, Inc. 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License version 2 as 6 | * published by the Free Software Foundation. 7 | */ 8 | 9 | #include "imx6ull-14x14-emmc-4.3-800x480-c.dts" 10 | 11 | &gpmi { 12 | pinctrl-names = "default"; 13 | pinctrl-0 = <&pinctrl_gpmi_nand_1>; 14 | status = "okay"; 15 | nand-on-flash-bbt; 16 | }; 17 | 18 | &iomuxc { 19 | pinctrl_gpmi_nand_1: gpmi-nand-1 { 20 | fsl,pins = < 21 | MX6UL_PAD_NAND_CLE__RAWNAND_CLE 0xb0b1 22 | MX6UL_PAD_NAND_ALE__RAWNAND_ALE 0xb0b1 23 | MX6UL_PAD_NAND_WP_B__RAWNAND_WP_B 0xb0b1 24 | MX6UL_PAD_NAND_READY_B__RAWNAND_READY_B 0xb000 25 | MX6UL_PAD_NAND_CE0_B__RAWNAND_CE0_B 0xb0b1 26 | MX6UL_PAD_NAND_CE1_B__RAWNAND_CE1_B 0xb0b1 27 | MX6UL_PAD_NAND_RE_B__RAWNAND_RE_B 0xb0b1 28 | MX6UL_PAD_NAND_WE_B__RAWNAND_WE_B 0xb0b1 29 | MX6UL_PAD_NAND_DATA00__RAWNAND_DATA00 0xb0b1 30 | MX6UL_PAD_NAND_DATA01__RAWNAND_DATA01 0xb0b1 31 | MX6UL_PAD_NAND_DATA02__RAWNAND_DATA02 0xb0b1 32 | MX6UL_PAD_NAND_DATA03__RAWNAND_DATA03 0xb0b1 33 | MX6UL_PAD_NAND_DATA04__RAWNAND_DATA04 0xb0b1 34 | MX6UL_PAD_NAND_DATA05__RAWNAND_DATA05 0xb0b1 35 | MX6UL_PAD_NAND_DATA06__RAWNAND_DATA06 0xb0b1 36 | MX6UL_PAD_NAND_DATA07__RAWNAND_DATA07 0xb0b1 37 | >; 38 | }; 39 | }; 40 | 41 | &usdhc2 { 42 | status = "disabled"; 43 | }; 44 | -------------------------------------------------------------------------------- /src/file/ch02-08/create_debain.sh: -------------------------------------------------------------------------------- 1 | 2 | 3 | if [ ${FIRMWARE_CURRENT_PLATFORMS} == "ARM" ]; then 4 | CHIP_ARCH=armhf 5 | qemu_arch=arm 6 | else 7 | CHIP_ARCH=arm64 8 | qemu_arch=aarch64 9 | fi 10 | 11 | OPT_OS_VER=bookworm 12 | 13 | sudo apt-get install debootstrap debian-archive-keyring qemu-user-static -y 14 | 15 | run_as_client() { 16 | $@ > /dev/null 2>&1 17 | } 18 | 19 | mount_chroot() 20 | { 21 | sudo mount -t proc chproc "${NFS_PATH}"/proc 22 | sudo mount -t sysfs chsys "${NFS_PATH}"/sys 23 | sudo mount -t devtmpfs chdev "${NFS_PATH}"/dev || sudo mount --bind /dev "${NFS_PATH}"/dev 24 | sudo mount -t devpts chpts "${NFS_PATH}"/dev/pts 25 | } 26 | 27 | umount_chroot() 28 | { 29 | while grep -Eq "${NFS_PATH}.*(dev|proc|sys)" /proc/mounts 30 | do 31 | sudo umount -l --recursive "${NFS_PATH}"/dev >/dev/null 2>&1 32 | sudo umount -l "${NFS_PATH}"/proc >/dev/null 2>&1 33 | sudo umount -l "${NFS_PATH}"/sys >/dev/null 2>&1 34 | sleep 5 35 | done 36 | } 37 | 38 | if [ ! -d ${NFS_PATH}/bin/ ]; then 39 | sudo debootstrap --foreign --verbose --arch=${CHIP_ARCH} ${OPT_OS_VER} ${NFS_PATH} http://mirrors.tuna.tsinghua.edu.cn/debian/ 40 | fi 41 | 42 | sudo chmod -Rv 777 ${NFS_PATH}/usr/ 43 | 44 | cp /usr/bin/qemu-${qemu_arch}-static ${NFS_PATH}/usr/bin/ 45 | chmod +x ${NFS_PATH}/usr/bin/qemu-${qemu_arch}-static 46 | 47 | #基于debootstrap完成后续安装 48 | cd ${NFS_PATH} 49 | 50 | mount_chroot 51 | LC_ALL=C LANGUAGE=C LANG=C sudo chroot ${NFS_PATH} /debootstrap/debootstrap --second-stage --verbose 52 | LC_ALL=C LANGUAGE=C LANG=C sudo chroot ${NFS_PATH} apt-get install vim libatomic1 -y 53 | umount_chroot 54 | -------------------------------------------------------------------------------- /src/file/ch02-09/etc/fstab: -------------------------------------------------------------------------------- 1 | # 2 | /dev/root / ext2 rw,noauto 0 1 3 | proc /proc proc defaults 0 0 4 | devpts /dev/pts devpts defaults,gid=5,mode=620,ptmxmode=0666 0 0 5 | tmpfs /dev/shm tmpfs mode=0777 0 0 6 | tmpfs /tmp tmpfs mode=1777 0 0 7 | tmpfs /run tmpfs mode=0755,nosuid,nodev 0 0 8 | sysfs /sys sysfs defaults 0 0 -------------------------------------------------------------------------------- /src/file/ch02-09/etc/hostname: -------------------------------------------------------------------------------- 1 | freedom -------------------------------------------------------------------------------- /src/file/ch02-09/etc/inittab: -------------------------------------------------------------------------------- 1 | # /etc/inittab 2 | # 3 | # Copyright (C) 2001 Erik Andersen 4 | # 5 | # Note: BusyBox init doesn't support runlevels. The runlevels field is 6 | # completely ignored by BusyBox init. If you want runlevels, use 7 | # sysvinit. 8 | # 9 | # Format for each entry: ::: 10 | # 11 | # id == tty to run on, or empty for /dev/console 12 | # runlevels == ignored 13 | # action == one of sysinit, respawn, askfirst, wait, and once 14 | # process == program to run 15 | 16 | # Startup the system 17 | ::sysinit:/bin/mount -t proc proc /proc 18 | ::sysinit:/bin/mount -o remount,rw / 19 | ::sysinit:/bin/mkdir -p /dev/pts /dev/shm 20 | ::sysinit:/bin/mount -a 21 | ::sysinit:/bin/mkdir -p /run/lock/subsys 22 | ::sysinit:/sbin/swapon -a 23 | null::sysinit:/bin/ln -sf /proc/self/fd /dev/fd 24 | null::sysinit:/bin/ln -sf /proc/self/fd/0 /dev/stdin 25 | null::sysinit:/bin/ln -sf /proc/self/fd/1 /dev/stdout 26 | null::sysinit:/bin/ln -sf /proc/self/fd/2 /dev/stderr 27 | ::sysinit:/bin/hostname -F /etc/hostname 28 | # now run any rc scripts 29 | ::sysinit:/etc/init.d/rcS 30 | 31 | # Put a getty on the serial port 32 | ttymxc0::respawn:/sbin/getty -L ttymxc0 0 vt100 # GENERIC_SERIAL 33 | 34 | # Stuff to do for the 3-finger salute 35 | #::ctrlaltdel:/sbin/reboot 36 | 37 | # Stuff to do before rebooting 38 | ::shutdown:/etc/init.d/rcK 39 | ::shutdown:/sbin/swapoff -a 40 | ::shutdown:/bin/umount -a -r -------------------------------------------------------------------------------- /src/file/ch02-09/etc/network/interfaces: -------------------------------------------------------------------------------- 1 | # The primary network interface, address and gateway set as the 2 | auto eth0 3 | iface eth0 inet static 4 | address 192.168.1.125 5 | netmask 255.255.255.0 6 | gateway 192.168.1.1 7 | 8 | # 注意,address和gateway的设置根据路由器或者网关来定义,启动IP地址不能与当前局域网内设备冲突。 -------------------------------------------------------------------------------- /src/file/ch02-09/etc/passwd: -------------------------------------------------------------------------------- 1 | root:x:0:0:root:/root:/bin/sh 2 | daemon:x:1:1:daemon:/usr/sbin:/bin/false 3 | bin:x:2:2:bin:/bin:/bin/false 4 | sys:x:3:3:sys:/dev:/bin/false 5 | sync:x:4:100:sync:/bin:/bin/sync 6 | mail:x:8:8:mail:/var/spool/mail:/bin/false 7 | www-data:x:33:33:www-data:/var/www:/bin/false 8 | operator:x:37:37:Operator:/var:/bin/false 9 | nobody:x:65534:65534:nobody:/home:/bin/false -------------------------------------------------------------------------------- /src/file/ch02-09/etc/resolv.conf: -------------------------------------------------------------------------------- 1 | nameserver 223.5.5.5 2 | nameserver 8.8.8.8 3 | nameserver 8.8.4.4 -------------------------------------------------------------------------------- /src/file/ch02-10/buildroot-patch/dl/helloworld/Makefile: -------------------------------------------------------------------------------- 1 | CPPFLAGS += 2 | LDLIBS += 3 | 4 | all: helloworld 5 | 6 | helloworld: helloworld.o 7 | $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LDLIBS) 8 | 9 | clean: 10 | rm -f *.o helloworld 11 | 12 | .PHONY: all clean -------------------------------------------------------------------------------- /src/file/ch02-10/buildroot-patch/dl/helloworld/helloworld.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | void main(void) 4 | { 5 | printf("Hello world.\n"); 6 | } -------------------------------------------------------------------------------- /src/file/ch02-10/buildroot-patch/package/Config.in: -------------------------------------------------------------------------------- 1 | config BR2_PACKAGE_HELLOWORLD 2 | bool "helloworld" 3 | help 4 | This is a demo to add local app. -------------------------------------------------------------------------------- /src/file/ch02-10/buildroot-patch/package/helloworld.mk: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # helloworld 4 | # 5 | ################################################################################ 6 | 7 | HELLOWORLD_VERSION:= 1.0.0 8 | HELLOWORLD_SITE:= $(CURDIR)/dl/helloworld 9 | HELLOWORLD_SITE_METHOD:=local 10 | HELLOWORLD_INSTALL_TARGET:=YES 11 | 12 | define HELLOWORLD_BUILD_CMDS 13 | $(MAKE) CC="$(TARGET_CC)" LD="$(TARGET_LD)" -C $(@D) all 14 | endef 15 | 16 | define HELLOWORLD_INSTALL_TARGET_CMDS 17 | $(INSTALL) -D -m 0755 $(@D)/helloworld $(TARGET_DIR)/bin 18 | endef 19 | 20 | define HELLOWORLD_PERMISSIONS 21 | /bin/helloworld f 4755 0 0 - - - - - 22 | endef 23 | 24 | $(eval $(generic-package)) -------------------------------------------------------------------------------- /src/file/ch02-13/build.sh: -------------------------------------------------------------------------------- 1 | ${SUPPORT_ENV_INSTALL}/bin/qmake 2 | make -------------------------------------------------------------------------------- /src/file/ch02-13/image_display.pro: -------------------------------------------------------------------------------- 1 | #------------------------------------------------- 2 | # 3 | # Project created by QtCreator 2019-04-22T17:27:30 4 | # 5 | #------------------------------------------------- 6 | 7 | QT += core gui 8 | 9 | greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 10 | 11 | TARGET = image_display 12 | TEMPLATE = app 13 | 14 | # The following define makes your compiler emit warnings if you use 15 | # any feature of Qt which has been marked as deprecated (the exact warnings 16 | # depend on your compiler). Please consult the documentation of the 17 | # deprecated API in order to know how to port your code away from it. 18 | DEFINES += QT_DEPRECATED_WARNINGS 19 | 20 | # You can also make your code fail to compile if you use deprecated APIs. 21 | # In order to do so, uncomment the following line. 22 | # You can also select to disable deprecated APIs only up to a certain version of Qt. 23 | #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 24 | 25 | 26 | SOURCES += \ 27 | main.cpp \ 28 | mainwindow.cpp 29 | 30 | HEADERS += \ 31 | mainwindow.h 32 | -------------------------------------------------------------------------------- /src/file/ch02-13/mainwindow.h: -------------------------------------------------------------------------------- 1 | /* Copyright 2019 Tronlong Elec. Tech. Co. Ltd. All Rights Reserved. */ 2 | 3 | #ifndef MAINWINDOW_H 4 | #define MAINWINDOW_H 5 | 6 | #include 7 | #include 8 | #include 9 | #include 10 | 11 | class MainWindow : public QMainWindow { 12 | Q_OBJECT 13 | 14 | public: 15 | MainWindow(QWidget *parent = 0); 16 | ~MainWindow(); 17 | 18 | bool LoadImage(QString img_path); 19 | 20 | private: 21 | QPushButton m_btn_exit; 22 | QLabel m_label; 23 | QPixmap m_pixmap; 24 | 25 | private slots: 26 | void exit(); 27 | 28 | protected: 29 | // Rewrite resizeEvent() of QMainWindow. 30 | void resizeEvent(QResizeEvent*); 31 | }; 32 | 33 | #endif // MAINWINDOW_H 34 | -------------------------------------------------------------------------------- /src/file/ch02-x6/build_shell.sh: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # This file is used to build u-boot shell 4 | # 5 | # 6 | ################################################################################ 7 | 8 | #build boot.cmd 9 | mkimage -C none -A arm -T script -d boot.cmd boot.scr 10 | mv -fv boot.scr "${BUILD_TFTP_PATH}"/ 11 | cp -fv config.txt "${BUILD_TFTP_PATH}"/ 12 | 13 | #build dtbo 14 | for file in $(find "./" -type f -name "*.dts"); do 15 | # 提取文件名(不包含路径) 16 | filename=$(basename "$file") 17 | filename="${filename%.*}" 18 | dtc -@ -I dts -O dtb -o ${filename}.dtbo ${filename}.dts 19 | done 20 | 21 | mv -fv *.dtbo "${BUILD_TFTP_PATH}"/ -------------------------------------------------------------------------------- /src/file/ch02-x6/config.txt: -------------------------------------------------------------------------------- 1 | ## nfs network 2 | serverip=192.168.2.29 3 | ipaddr=192.168.2.99 4 | gateway=192.168.2.1 5 | netmask=255.255.255.0 6 | nfspath=/home/freedom/Desktop/user_git/sdk/nfs 7 | 8 | ## loglevel 9 | printk_level=7 10 | 11 | ## console set 12 | console_serial=ttymxc0 13 | console_baud=115200 14 | # display_bootinfo=enable 15 | 16 | ## boot manage 17 | ## net/mmc: net or mmc boot mode 18 | boot_mod=net 19 | 20 | ## fdt file manage 21 | fdt_file=imx6ull-14x14-emmc-4.3-800x480-c.dtb 22 | 23 | ## support overlays 24 | overlays=imx6ull-rmk-overlay 25 | -------------------------------------------------------------------------------- /src/file/ch02-x6/imx6ull-rmk-overlay.dts: -------------------------------------------------------------------------------- 1 | 2 | /dts-v1/; 3 | /plugin/; 4 | 5 | &usr_beep { 6 | rmk,value = <0x1>; 7 | }; 8 | -------------------------------------------------------------------------------- /src/file/ch02-xz/mksdcard.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # partition size in MB 4 | BOOT_ROM_SIZE=10 5 | 6 | # wait for the SD/MMC device node ready 7 | while [ ! -e $1 ] 8 | do 9 | sleep 1 10 | echo “wait for $1 appear” 11 | done 12 | 13 | # call sfdisk to create partition table 14 | # destroy the partition table 15 | node=$1 16 | dd if=/dev/zero of=${node} bs=1024 count=1 17 | 18 | sfdisk --force ${node} << EOF 19 | ${BOOT_ROM_SIZE}M,128M,c 20 | 138M,32M,83 21 | 200M,,83 22 | write 23 | EOF 24 | -------------------------------------------------------------------------------- /src/file/ch03-00/bus_module/device/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # Build for module files. 4 | # Copyright (c) 2020-2023 5 | # Original Author: 1107473010@qq.com 6 | # 7 | ################################################################################ 8 | obj-m := kernel_platform_device.o 9 | 10 | CURRENT_PATH := $(shell pwd) 11 | 12 | # 指定完成编译的内核源码路径 13 | KERNELDIR ?= $(shell printenv SUPPORT_ENV_KERNEL_DIR) 14 | 15 | # 指定交叉编译工具链 16 | CROSS_COMPILE ?= arm-none-linux-gnueabihf- 17 | 18 | ARCH ?= arm 19 | 20 | build: kernel_modules 21 | 22 | kernel_modules: 23 | $(info "platform:${ARCH}, COMPILE:${CROSS_COMPILE}") 24 | $(info "kernel_dir:${KERNELDIR}") 25 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} modules 26 | 27 | clean: 28 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean 29 | -------------------------------------------------------------------------------- /src/file/ch03-00/bus_module/driver/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # Build for module files. 4 | # Copyright (c) 2020-2023 5 | # Original Author: 1107473010@qq.com 6 | # 7 | ################################################################################ 8 | obj-m := kernel_platform_driver.o 9 | 10 | CURRENT_PATH := $(shell pwd) 11 | 12 | # 指定完成编译的内核源码路径 13 | KERNELDIR ?= $(shell printenv SUPPORT_ENV_KERNEL_DIR) 14 | 15 | # 指定交叉编译工具链 16 | CROSS_COMPILE ?= arm-none-linux-gnueabihf- 17 | 18 | ARCH ?= arm 19 | 20 | build: kernel_modules 21 | 22 | kernel_modules: 23 | $(info "platform:${ARCH}, COMPILE:${CROSS_COMPILE}") 24 | $(info "kernel_dir:${KERNELDIR}") 25 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} modules 26 | 27 | clean: 28 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean 29 | -------------------------------------------------------------------------------- /src/file/ch03-00/multi_file/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # Build for module files. 4 | # Copyright (c) 2020-2023 5 | # Original Author: 1107473010@qq.com 6 | # 7 | ################################################################################ 8 | MODULE_NAME := combian 9 | obj-m := ${MODULE_NAME}.o 10 | ${MODULE_NAME}-objs := kernel_main.o kernel_base.o 11 | 12 | CURRENT_PATH := $(shell pwd) 13 | 14 | # 指定完成编译的内核源码路径 15 | KERNELDIR ?= $(shell printenv SUPPORT_ENV_KERNEL_DIR) 16 | 17 | # 指定交叉编译工具链 18 | CROSS_COMPILE ?= arm-none-linux-gnueabihf- 19 | 20 | ARCH ?= arm 21 | 22 | build: kernel_modules 23 | 24 | kernel_modules: 25 | kernel_modules: 26 | $(info "platform:${ARCH}, COMPILE:${CROSS_COMPILE}") 27 | $(info "kernel_dir:${KERNELDIR}") 28 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} modules 29 | 30 | clean: 31 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean -------------------------------------------------------------------------------- /src/file/ch03-00/multi_file/kernel_base.c: -------------------------------------------------------------------------------- 1 | //////////////////////////////////////////////////////////////////////////// 2 | // (c) copyright 2024-by Persional Inc. 3 | // All Rights Reserved 4 | // 5 | // Name: 6 | // relay.c 7 | // 8 | // Purpose: 9 | // 10 | // Author: 11 | // @听心跳的声音 12 | // 13 | // Assumptions: 14 | // 15 | // Revision History: 16 | // 12/19/2022 Create New Version 17 | ///////////////////////////////////////////////////////////////////////////// 18 | #include 19 | #include 20 | 21 | void show(void) 22 | { 23 | printk(KERN_ALERT "kernel show run!\r\n"); 24 | } 25 | 26 | -------------------------------------------------------------------------------- /src/file/ch03-00/multi_file/kernel_main.c: -------------------------------------------------------------------------------- 1 | //////////////////////////////////////////////////////////////////////////// 2 | // (c) copyright 2024-by Persional Inc. 3 | // All Rights Reserved 4 | // 5 | // Name: 6 | // relay.c 7 | // 8 | // Purpose: 9 | // 10 | // Author: 11 | // @听心跳的声音 12 | // 13 | // Assumptions: 14 | // 15 | // Revision History: 16 | // 12/19/2022 Create New Version 17 | ///////////////////////////////////////////////////////////////////////////// 18 | #include 19 | #include 20 | 21 | extern void show(void); 22 | 23 | static int kernel_main_init(void) 24 | { 25 | printk(KERN_ALERT "kernel main init!\r\n"); 26 | 27 | show(); 28 | 29 | return 0; 30 | } 31 | 32 | static void kernel_main_exit(void) 33 | { 34 | printk(KERN_ALERT "kernel main exit!\r\n"); 35 | } 36 | 37 | module_init(kernel_main_init); 38 | module_exit(kernel_main_exit); 39 | MODULE_AUTHOR("wzdxf"); 40 | MODULE_LICENSE("GPL v2"); 41 | MODULE_DESCRIPTION("platform driver for led"); 42 | MODULE_ALIAS("led_data"); 43 | -------------------------------------------------------------------------------- /src/file/ch03-00/relay_on/export/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # Build for module files. 4 | # Copyright (c) 2020-2023 5 | # Original Author: 1107473010@qq.com 6 | # 7 | ################################################################################ 8 | obj-m := export.o 9 | 10 | CURRENT_PATH := $(shell pwd) 11 | 12 | # 指定完成编译的内核源码路径 13 | KERNELDIR ?= $(shell printenv SUPPORT_ENV_KERNEL_DIR) 14 | 15 | # 指定交叉编译工具链 16 | CROSS_COMPILE ?= arm-none-linux-gnueabihf- 17 | 18 | ARCH ?= arm 19 | 20 | build: kernel_modules 21 | 22 | kernel_modules: 23 | $(info "platform:${ARCH}, COMPILE:${CROSS_COMPILE}") 24 | $(info "kernel_dir:${KERNELDIR}") 25 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} modules 26 | 27 | clean: 28 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean 29 | -------------------------------------------------------------------------------- /src/file/ch03-00/relay_on/export/export.c: -------------------------------------------------------------------------------- 1 | //////////////////////////////////////////////////////////////////////////// 2 | // (c) copyright 2024-by Persional Inc. 3 | // All Rights Reserved 4 | // 5 | // Name: 6 | // export.c 7 | // 8 | // Purpose: 9 | // 10 | // Author: 11 | // @听心跳的声音 12 | // 13 | // Assumptions: 14 | // 15 | // Revision History: 16 | // 12/19/2022 Create New Version 17 | ///////////////////////////////////////////////////////////////////////////// 18 | #include 19 | #include 20 | 21 | static int num = 10; 22 | void show(void) 23 | { 24 | printk(KERN_ALERT "show(),num=%d\r\n", num); 25 | } 26 | EXPORT_SYMBOL(show); 27 | 28 | static int export_init(void) 29 | { 30 | printk(KERN_ALERT "export init!\r\n"); 31 | return 0; 32 | } 33 | static void export_exit(void) 34 | { 35 | printk(KERN_ALERT "export exit!\r\n"); 36 | } 37 | 38 | module_init(export_init); 39 | module_exit(export_exit); 40 | MODULE_AUTHOR("wzdxf"); 41 | MODULE_LICENSE("GPL v2"); 42 | MODULE_DESCRIPTION("platform driver for led"); 43 | MODULE_ALIAS("led_data"); 44 | -------------------------------------------------------------------------------- /src/file/ch03-00/relay_on/relay/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # Build for module files. 4 | # Copyright (c) 2020-2023 5 | # Original Author: 1107473010@qq.com 6 | # 7 | ################################################################################ 8 | obj-m := relay.o 9 | 10 | CURRENT_PATH := $(shell pwd) 11 | 12 | # 指定完成编译的内核源码路径 13 | KERNELDIR ?= $(shell printenv SUPPORT_ENV_KERNEL_DIR) 14 | 15 | # 指定交叉编译工具链 16 | CROSS_COMPILE ?= arm-none-linux-gnueabihf- 17 | 18 | ARCH ?= arm 19 | 20 | KBUILD_EXTRA_SYMBOLS := $(CURRENT_PATH)/../export/Module.symvers 21 | 22 | build: kernel_modules 23 | 24 | kernel_modules: 25 | echo "platform:${ARCH}, COMPILE:${CROSS_COMPILE} Extra Symbols:${KBUILD_EXTRA_SYMBOLS}" 26 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) KBUILD_EXTRA_SYMBOLS=$(KBUILD_EXTRA_SYMBOLS) ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} modules 27 | 28 | clean: 29 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean 30 | -------------------------------------------------------------------------------- /src/file/ch03-00/relay_on/relay/relay.c: -------------------------------------------------------------------------------- 1 | //////////////////////////////////////////////////////////////////////////// 2 | // (c) copyright 2024-by Persional Inc. 3 | // All Rights Reserved 4 | // 5 | // Name: 6 | // relay.c 7 | // 8 | // Purpose: 9 | // 10 | // Author: 11 | // @听心跳的声音 12 | // 13 | // Assumptions: 14 | // 15 | // Revision History: 16 | // 12/19/2022 Create New Version 17 | ///////////////////////////////////////////////////////////////////////////// 18 | #include 19 | #include 20 | 21 | extern void show(void); 22 | 23 | static int relay_init(void) 24 | { 25 | printk(KERN_ALERT "relay init!\r\n"); 26 | 27 | show(); 28 | 29 | return 0; 30 | } 31 | 32 | static void relay_exit(void) 33 | { 34 | printk(KERN_ALERT "relay exit!\r\n"); 35 | } 36 | 37 | module_init(relay_init); 38 | module_exit(relay_exit); 39 | MODULE_AUTHOR("wzdxf"); 40 | MODULE_LICENSE("GPL v2"); 41 | MODULE_DESCRIPTION("platform driver for led"); 42 | MODULE_ALIAS("led_data"); 43 | -------------------------------------------------------------------------------- /src/file/ch03-03/beep/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # Build for module files. 4 | # Copyright (c) 2020-2023 5 | # Original Author: 1107473010@qq.com 6 | # 7 | ################################################################################ 8 | obj-m := kernel_beep.o 9 | 10 | CURRENT_PATH := $(shell pwd) 11 | 12 | # 指定完成编译的内核源码路径 13 | KERNELDIR ?= $(shell printenv SUPPORT_ENV_KERNEL_DIR) 14 | 15 | # 指定交叉编译工具链 16 | CROSS_COMPILE ?= arm-none-linux-gnueabihf- 17 | 18 | ARCH ?= arm 19 | 20 | build: kernel_modules 21 | 22 | kernel_modules: 23 | $(info "platform:${ARCH}, COMPILE:${CROSS_COMPILE}") 24 | $(info "kernel_dir:${KERNELDIR}") 25 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} modules 26 | 27 | clean: 28 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean 29 | -------------------------------------------------------------------------------- /src/file/ch03-03/example/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # Build for module files. 4 | # Copyright (c) 2020-2023 5 | # Original Author: 1107473010@qq.com 6 | # 7 | ################################################################################ 8 | obj-m := kernel_example.o 9 | 10 | CURRENT_PATH := $(shell pwd) 11 | 12 | # 指定完成编译的内核源码路径 13 | KERNELDIR ?= $(shell printenv SUPPORT_ENV_KERNEL_DIR) 14 | 15 | # 指定交叉编译工具链 16 | CROSS_COMPILE ?= arm-none-linux-gnueabihf- 17 | 18 | ARCH ?= arm 19 | 20 | build: kernel_modules 21 | 22 | kernel_modules: 23 | $(info "platform:${ARCH}, COMPILE:${CROSS_COMPILE}") 24 | $(info "kernel_dir:${KERNELDIR}") 25 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} modules 26 | 27 | clean: 28 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean 29 | -------------------------------------------------------------------------------- /src/file/ch03-03/miscbeep/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # Build for module files. 4 | # Copyright (c) 2020-2023 5 | # Original Author: 1107473010@qq.com 6 | # 7 | ################################################################################ 8 | obj-m := kernel_miscbeep.o 9 | 10 | CURRENT_PATH := $(shell pwd) 11 | 12 | # 指定完成编译的内核源码路径 13 | KERNELDIR ?= $(shell printenv SUPPORT_ENV_KERNEL_DIR) 14 | 15 | # 指定交叉编译工具链 16 | CROSS_COMPILE ?= arm-none-linux-gnueabihf- 17 | 18 | ARCH ?= arm 19 | 20 | build: kernel_modules 21 | 22 | kernel_modules: 23 | $(info "platform:${ARCH}, COMPILE:${CROSS_COMPILE}") 24 | $(info "kernel_dir:${KERNELDIR}") 25 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} modules 26 | 27 | clean: 28 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean 29 | -------------------------------------------------------------------------------- /src/file/ch03-03/miscbeep/test/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # Build for module files. 4 | # Copyright (c) 2020-2023 5 | # Original Author: 1107473010@qq.com 6 | # 7 | ################################################################################ 8 | target = beep_test 9 | object = beep_test.o 10 | 11 | # 指定交叉编译工具链 12 | CRSOSS_COMPILE?= arm-none-linux-gnueabihf- 13 | 14 | all: $(target) 15 | 16 | $(target): $(object) 17 | $(CRSOSS_COMPILE)gcc -o $@ $^ 18 | 19 | # 定义c文件编译规则 20 | %.o: %.c 21 | $(CRSOSS_COMPILE)gcc -c $< -o $@ 22 | 23 | clean: 24 | rm -f $(target) $(object) -------------------------------------------------------------------------------- /src/file/ch03-03/miscbeep/test/beep_test.c: -------------------------------------------------------------------------------- 1 | /* 2 | * File : beep_test.c 3 | * test for beep driver. 4 | * COPYRIGHT (C) 2023, zc 5 | * 6 | * Change Logs: 7 | * Date Author Notes 8 | * 2023-11-22 zc the first version 9 | */ 10 | #include 11 | #include 12 | #include 13 | #include 14 | 15 | #define DEVICE_BEEP "/dev/miscbeep" 16 | 17 | int main(int argc, const char *argv[]) 18 | { 19 | unsigned char val = 1; 20 | int fd; 21 | 22 | fd = open(DEVICE_BEEP, O_RDWR | O_NDELAY); 23 | if (fd == -1) 24 | { 25 | printf("open %s error\r\n", DEVICE_BEEP); 26 | return -1; 27 | } 28 | 29 | if (argc > 1) 30 | { 31 | val = atoi(argv[1]); 32 | } 33 | 34 | write(fd, &val, 1); 35 | 36 | close(fd); 37 | 38 | exit(0); 39 | } 40 | -------------------------------------------------------------------------------- /src/file/ch03-04/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # Build for module files. 4 | # Copyright (c) 2020-2023 5 | # Original Author: 1107473010@qq.com 6 | # 7 | ################################################################################ 8 | obj-m := kernel_led.o 9 | 10 | CURRENT_PATH := $(shell pwd) 11 | 12 | # 指定完成编译的内核源码路径 13 | KERNELDIR ?= $(shell printenv SUPPORT_ENV_KERNEL_DIR) 14 | 15 | # 指定交叉编译工具链 16 | CROSS_COMPILE ?= arm-none-linux-gnueabihf- 17 | 18 | ARCH ?= arm 19 | 20 | build: kernel_modules 21 | 22 | kernel_modules: 23 | $(info "platform:${ARCH}, COMPILE:${CROSS_COMPILE}") 24 | $(info "kernel_dir:${KERNELDIR}") 25 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} modules 26 | 27 | clean: 28 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean 29 | -------------------------------------------------------------------------------- /src/file/ch03-04/test/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # Build for module files. 4 | # Copyright (c) 2020-2023 5 | # Original Author: 1107473010@qq.com 6 | # 7 | ################################################################################ 8 | target = led_test 9 | object = led_test.o 10 | 11 | # 指定交叉编译工具链 12 | CRSOSS_COMPILE?= arm-none-linux-gnueabihf- 13 | 14 | all: $(target) 15 | 16 | $(target): $(object) 17 | $(CRSOSS_COMPILE)gcc -o $@ $^ 18 | 19 | # 定义c文件编译规则 20 | %.o: %.c 21 | $(CRSOSS_COMPILE)gcc -c $< -o $@ 22 | 23 | clean: 24 | rm -f $(target) $(object) -------------------------------------------------------------------------------- /src/file/ch03-04/test/led_test.c: -------------------------------------------------------------------------------- 1 | //////////////////////////////////////////////////////////////////////////// 2 | // (c) copyright 2024-by Persional Inc. 3 | // All Rights Reserved 4 | // 5 | // Name: 6 | // led_test.c 7 | // 8 | // Purpose: 9 | // LED应用层控制。 10 | // 设备文件: /dev/led 11 | // 配置pinctrl文件: /sys/devices/platform/20c406c.usr_led/pinctrl-led 12 | // 类管理文件: /sys/class/leds/led0/brightness 13 | // 14 | // Author: 15 | // @听心跳的声音 16 | // 17 | // Assumptions: 18 | // 19 | // Revision History: 20 | // 12/19/2022 Create New Version. 21 | // 23/08/202 Format update. 22 | ///////////////////////////////////////////////////////////////////////////// 23 | #include 24 | #include 25 | #include 26 | #include 27 | 28 | #define LED_DEVICE "/dev/led" 29 | 30 | int main(int argc, const char *argv[]) 31 | { 32 | unsigned char val = 1; 33 | int fd; 34 | 35 | fd = open(LED_DEVICE, O_RDWR | O_NDELAY); 36 | if (fd == -1) { 37 | printf("%s open error!\n", LED_DEVICE); 38 | exit(1); 39 | } 40 | 41 | if (argc > 1) { 42 | val = atoi(argv[1]); 43 | } 44 | 45 | write(fd, &val, 1); 46 | 47 | close(fd); 48 | 49 | exit(0); 50 | } 51 | -------------------------------------------------------------------------------- /src/file/ch03-05/key_input/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # Build for module files. 4 | # Copyright (c) 2020-2023 5 | # Original Author: 1107473010@qq.com 6 | # 7 | ################################################################################ 8 | obj-m := kernel_input.o 9 | 10 | CURRENT_PATH := $(shell pwd) 11 | 12 | # 指定完成编译的内核源码路径 13 | KERNELDIR ?= $(shell printenv SUPPORT_ENV_KERNEL_DIR) 14 | 15 | # 指定交叉编译工具链 16 | CROSS_COMPILE ?= arm-none-linux-gnueabihf- 17 | 18 | ARCH ?= arm 19 | 20 | build: kernel_modules 21 | 22 | kernel_modules: 23 | $(info "platform:${ARCH}, COMPILE:${CROSS_COMPILE}") 24 | $(info "kernel_dir:${KERNELDIR}") 25 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} modules 26 | 27 | clean: 28 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean 29 | -------------------------------------------------------------------------------- /src/file/ch03-05/key_input/test/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # Build for module files. 4 | # Copyright (c) 2020-2023 5 | # Original Author: 1107473010@qq.com 6 | # 7 | ################################################################################ 8 | target = key_input_test 9 | object = key_input_test.o 10 | 11 | # 指定交叉编译工具链 12 | CRSOSS_COMPILE?= arm-none-linux-gnueabihf- 13 | 14 | all: $(target) 15 | 16 | $(target): $(object) 17 | $(CRSOSS_COMPILE)gcc -o $@ $^ 18 | 19 | # 定义c文件编译规则 20 | %.o: %.c 21 | $(CRSOSS_COMPILE)gcc -c $< -o $@ 22 | 23 | clean: 24 | rm -f $(target) $(object) -------------------------------------------------------------------------------- /src/file/ch03-05/touchscreen/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # Build for module files. 4 | # Copyright (c) 2020-2023 5 | # Original Author: 1107473010@qq.com 6 | # 7 | ################################################################################ 8 | obj-m := kernel_gt9147.o 9 | 10 | CURRENT_PATH := $(shell pwd) 11 | 12 | # 指定完成编译的内核源码路径 13 | KERNELDIR ?= $(shell printenv SUPPORT_ENV_KERNEL_DIR) 14 | 15 | # 指定交叉编译工具链 16 | CROSS_COMPILE ?= arm-none-linux-gnueabihf- 17 | 18 | ARCH ?= arm 19 | 20 | build: kernel_modules 21 | 22 | kernel_modules: 23 | $(info "platform:${ARCH}, COMPILE:${CROSS_COMPILE}") 24 | $(info "kernel_dir:${KERNELDIR}") 25 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} modules 26 | 27 | clean: 28 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean 29 | -------------------------------------------------------------------------------- /src/file/ch03-07/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # Build for module files. 4 | # Copyright (c) 2020-2023 5 | # Original Author: 1107473010@qq.com 6 | # 7 | ################################################################################ 8 | obj-m := kernel_i2c_ap.o 9 | 10 | CURRENT_PATH := $(shell pwd) 11 | 12 | # 指定完成编译的内核源码路径 13 | KERNELDIR ?= $(shell printenv SUPPORT_ENV_KERNEL_DIR) 14 | 15 | # 指定交叉编译工具链 16 | CROSS_COMPILE ?= arm-none-linux-gnueabihf- 17 | 18 | ARCH ?= arm 19 | 20 | build: kernel_modules 21 | 22 | kernel_modules: 23 | $(info "platform:${ARCH}, COMPILE:${CROSS_COMPILE}") 24 | $(info "kernel_dir:${KERNELDIR}") 25 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} modules 26 | 27 | clean: 28 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean 29 | -------------------------------------------------------------------------------- /src/file/ch03-07/test/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # Build for module files. 4 | # Copyright (c) 2020-2023 5 | # Original Author: 1107473010@qq.com 6 | # 7 | ################################################################################ 8 | target = ap_i2c_test 9 | object = ap_i2c_test.o 10 | 11 | # 指定交叉编译工具链 12 | CRSOSS_COMPILE?= arm-none-linux-gnueabihf- 13 | 14 | all: $(target) 15 | 16 | $(target): $(object) 17 | $(CRSOSS_COMPILE)gcc -o $@ $^ 18 | 19 | # 定义c文件编译规则 20 | %.o: %.c 21 | $(CRSOSS_COMPILE)gcc -c $< -o $@ 22 | 23 | clean: 24 | rm -f $(target) $(object) -------------------------------------------------------------------------------- /src/file/ch03-07/test/ap_i2c_test.c: -------------------------------------------------------------------------------- 1 | /* 2 | * File : ap_i2c_test.c 3 | * test for ap i2c driver. 4 | * COPYRIGHT (C) 2023, zc 5 | * 6 | * Change Logs: 7 | * Date Author Notes 8 | * 2023-11-22 zc the first version 9 | */ 10 | #include 11 | #include 12 | #include 13 | 14 | #define I2C_DRIVER_NAME "/dev/ap3216" 15 | 16 | int main(int argc, char *argv[]) 17 | { 18 | int fd; 19 | unsigned short databuf[3]; 20 | unsigned short ir, als, ps; 21 | int nSize = 0; 22 | 23 | fd = open(I2C_DRIVER_NAME, O_RDWR); 24 | if (fd < 0) 25 | { 26 | printf("can't open file %s\r\n", I2C_DRIVER_NAME); 27 | return -1; 28 | } 29 | 30 | while (1) 31 | { 32 | nSize = read(fd, databuf, sizeof(databuf)); 33 | if (nSize >= 0) 34 | { 35 | ir = databuf[0]; /* ir传感器数据 */ 36 | als = databuf[1]; /* als传感器数据 */ 37 | ps = databuf[2]; /* ps传感器数据 */ 38 | printf("read size:%d\r\n", nSize); 39 | printf("ir = %d, als = %d, ps = %d\r\n", ir, als, ps); 40 | } 41 | usleep(200000); /*100ms */ 42 | } 43 | 44 | close(fd); 45 | return 0; 46 | } 47 | -------------------------------------------------------------------------------- /src/file/ch03-08/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # Build for module files. 4 | # Copyright (c) 2020-2023 5 | # Original Author: 1107473010@qq.com 6 | # 7 | ################################################################################ 8 | obj-m := kernel_spi_icm.o 9 | 10 | CURRENT_PATH := $(shell pwd) 11 | 12 | # 指定完成编译的内核源码路径 13 | KERNELDIR ?= $(shell printenv SUPPORT_ENV_KERNEL_DIR) 14 | 15 | # 指定交叉编译工具链 16 | CROSS_COMPILE ?= arm-none-linux-gnueabihf- 17 | 18 | ARCH ?= arm 19 | 20 | build: kernel_modules 21 | 22 | kernel_modules: 23 | $(info "platform:${ARCH}, COMPILE:${CROSS_COMPILE}") 24 | $(info "kernel_dir:${KERNELDIR}") 25 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} modules 26 | 27 | clean: 28 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean 29 | -------------------------------------------------------------------------------- /src/file/ch03-08/test/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # Build for module files. 4 | # Copyright (c) 2020-2023 5 | # Original Author: 1107473010@qq.com 6 | # 7 | ################################################################################ 8 | target = icm_spi_test 9 | object = icm_spi_test.o 10 | 11 | # 指定交叉编译工具链 12 | CRSOSS_COMPILE?= arm-none-linux-gnueabihf- 13 | 14 | all: $(target) 15 | 16 | $(target): $(object) 17 | $(CRSOSS_COMPILE)gcc -o $@ $^ 18 | 19 | # 定义c文件编译规则 20 | %.o: %.c 21 | $(CRSOSS_COMPILE)gcc -c $< -o $@ 22 | 23 | clean: 24 | rm -f $(target) $(object) -------------------------------------------------------------------------------- /src/file/ch03-09/iio_adc/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # Build for module files. 4 | # Copyright (c) 2020-2023 5 | # Original Author: 1107473010@qq.com 6 | # 7 | ################################################################################ 8 | obj-m := kernel_iio_adc.o 9 | 10 | CURRENT_PATH := $(shell pwd) 11 | 12 | # 指定完成编译的内核源码路径 13 | KERNELDIR ?= $(shell printenv SUPPORT_ENV_KERNEL_DIR) 14 | 15 | # 指定交叉编译工具链 16 | CROSS_COMPILE ?= arm-none-linux-gnueabihf- 17 | 18 | ARCH ?= arm 19 | 20 | build: kernel_modules 21 | 22 | kernel_modules: 23 | $(info "platform:${ARCH}, COMPILE:${CROSS_COMPILE}") 24 | $(info "kernel_dir:${KERNELDIR}") 25 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} modules 26 | 27 | clean: 28 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean 29 | -------------------------------------------------------------------------------- /src/file/ch03-09/iio_hx711/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # Build for module files. 4 | # Copyright (c) 2020-2023 5 | # Original Author: 1107473010@qq.com 6 | # 7 | ################################################################################ 8 | obj-m := kernel_iio_hx711.o 9 | 10 | CURRENT_PATH := $(shell pwd) 11 | 12 | # 指定完成编译的内核源码路径 13 | KERNELDIR ?= $(shell printenv SUPPORT_ENV_KERNEL_DIR) 14 | 15 | # 指定交叉编译工具链 16 | CROSS_COMPILE ?= arm-none-linux-gnueabihf- 17 | 18 | ARCH ?= arm 19 | 20 | build: kernel_modules 21 | 22 | kernel_modules: 23 | $(info "platform:${ARCH}, COMPILE:${CROSS_COMPILE}") 24 | $(info "kernel_dir:${KERNELDIR}") 25 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} modules 26 | 27 | clean: 28 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean 29 | -------------------------------------------------------------------------------- /src/file/ch03-10/regmap_ap3216c/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # Build for module files. 4 | # Copyright (c) 2020-2023 5 | # Original Author: 1107473010@qq.com 6 | # 7 | ################################################################################ 8 | obj-m := kernel_regmap_i2c.o 9 | 10 | CURRENT_PATH := $(shell pwd) 11 | 12 | # 指定完成编译的内核源码路径 13 | KERNELDIR ?= $(shell printenv SUPPORT_ENV_KERNEL_DIR) 14 | 15 | # 指定交叉编译工具链 16 | CROSS_COMPILE ?= arm-none-linux-gnueabihf- 17 | 18 | ARCH ?= arm 19 | 20 | build: kernel_modules 21 | 22 | kernel_modules: 23 | $(info "platform:${ARCH}, COMPILE:${CROSS_COMPILE}") 24 | $(info "kernel_dir:${KERNELDIR}") 25 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} modules 26 | 27 | clean: 28 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean 29 | -------------------------------------------------------------------------------- /src/file/ch03-10/regmap_icm202608/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # Build for module files. 4 | # Copyright (c) 2020-2023 5 | # Original Author: 1107473010@qq.com 6 | # 7 | ################################################################################ 8 | obj-m := kernel_regmap_spi.o 9 | 10 | CURRENT_PATH := $(shell pwd) 11 | 12 | # 指定完成编译的内核源码路径 13 | KERNELDIR ?= $(shell printenv SUPPORT_ENV_KERNEL_DIR) 14 | 15 | # 指定交叉编译工具链 16 | CROSS_COMPILE ?= arm-none-linux-gnueabihf- 17 | 18 | ARCH ?= arm 19 | 20 | build: kernel_modules 21 | 22 | kernel_modules: 23 | $(info "platform:${ARCH}, COMPILE:${CROSS_COMPILE}") 24 | $(info "kernel_dir:${KERNELDIR}") 25 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} modules 26 | 27 | clean: 28 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean 29 | -------------------------------------------------------------------------------- /src/file/ch03-10/regmap_pcf8563/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # Build for module files. 4 | # Copyright (c) 2020-2023 5 | # Original Author: 1107473010@qq.com 6 | # 7 | ################################################################################ 8 | obj-m := kernel_regmap_rtc.o 9 | 10 | CURRENT_PATH := $(shell pwd) 11 | 12 | # 指定完成编译的内核源码路径 13 | KERNELDIR ?= $(shell printenv SUPPORT_ENV_KERNEL_DIR) 14 | 15 | # 指定交叉编译工具链 16 | CROSS_COMPILE ?= arm-none-linux-gnueabihf- 17 | 18 | ARCH ?= arm 19 | 20 | build: kernel_modules 21 | 22 | kernel_modules: 23 | $(info "platform:${ARCH}, COMPILE:${CROSS_COMPILE}") 24 | $(info "kernel_dir:${KERNELDIR}") 25 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} modules 26 | 27 | clean: 28 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean 29 | -------------------------------------------------------------------------------- /src/file/ch03-11/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # Build for module files. 4 | # Copyright (c) 2020-2023 5 | # Original Author: 1107473010@qq.com 6 | # 7 | ################################################################################ 8 | obj-m := kernel_rtc_pcf8563.o 9 | 10 | CURRENT_PATH := $(shell pwd) 11 | 12 | # 指定完成编译的内核源码路径 13 | KERNELDIR ?= $(shell printenv SUPPORT_ENV_KERNEL_DIR) 14 | 15 | # 指定交叉编译工具链 16 | CROSS_COMPILE ?= arm-none-linux-gnueabihf- 17 | 18 | ARCH ?= arm 19 | 20 | build: kernel_modules 21 | 22 | kernel_modules: 23 | $(info "platform:${ARCH}, COMPILE:${CROSS_COMPILE}") 24 | $(info "kernel_dir:${KERNELDIR}") 25 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} modules 26 | 27 | clean: 28 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean 29 | -------------------------------------------------------------------------------- /src/file/ch03-12/pwm_consumer/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # Build for module files. 4 | # Copyright (c) 2020-2023 5 | # Original Author: 1107473010@qq.com 6 | # 7 | ################################################################################ 8 | obj-m := kernel_pwm_consumer.o 9 | 10 | CURRENT_PATH := $(shell pwd) 11 | 12 | # 指定完成编译的内核源码路径 13 | KERNELDIR ?= $(shell printenv SUPPORT_ENV_KERNEL_DIR) 14 | 15 | # 指定交叉编译工具链 16 | CROSS_COMPILE ?= arm-none-linux-gnueabihf- 17 | 18 | ARCH ?= arm 19 | 20 | build: kernel_modules 21 | 22 | kernel_modules: 23 | $(info "platform:${ARCH}, COMPILE:${CROSS_COMPILE}") 24 | $(info "kernel_dir:${KERNELDIR}") 25 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} modules 26 | 27 | clean: 28 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean 29 | -------------------------------------------------------------------------------- /src/file/ch03-12/pwm_provider/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # Build for module files. 4 | # Copyright (c) 2020-2023 5 | # Original Author: 1107473010@qq.com 6 | # 7 | ################################################################################ 8 | obj-m := kernel_pwm.o 9 | 10 | CURRENT_PATH := $(shell pwd) 11 | 12 | # 指定完成编译的内核源码路径 13 | KERNELDIR ?= $(shell printenv SUPPORT_ENV_KERNEL_DIR) 14 | 15 | # 指定交叉编译工具链 16 | CROSS_COMPILE ?= arm-none-linux-gnueabihf- 17 | 18 | ARCH ?= arm 19 | 20 | build: kernel_modules 21 | 22 | kernel_modules: 23 | $(info "platform:${ARCH}, COMPILE:${CROSS_COMPILE}") 24 | $(info "kernel_dir:${KERNELDIR}") 25 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} modules 26 | 27 | clean: 28 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean 29 | -------------------------------------------------------------------------------- /src/file/ch03-12/pwm_provider/test/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # Build for module files. 4 | # Copyright (c) 2020-2023 5 | # Original Author: 1107473010@qq.com 6 | # 7 | ################################################################################ 8 | target = pwm_test 9 | object = pwm_test.o 10 | 11 | # 指定交叉编译工具链 12 | CRSOSS_COMPILE?= arm-none-linux-gnueabihf- 13 | 14 | all: $(target) 15 | 16 | $(target): $(object) 17 | $(CRSOSS_COMPILE)gcc -o $@ $^ 18 | 19 | # 定义c文件编译规则 20 | %.o: %.c 21 | $(CRSOSS_COMPILE)gcc -c $< -o $@ 22 | 23 | clean: 24 | rm -f $(target) $(object) -------------------------------------------------------------------------------- /src/file/ch03-13/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # Build for module files. 4 | # Copyright (c) 2020-2023 5 | # Original Author: 1107473010@qq.com 6 | # 7 | ################################################################################ 8 | obj-m := kernel_pwm_bl.o 9 | 10 | CURRENT_PATH := $(shell pwd) 11 | 12 | # 指定完成编译的内核源码路径 13 | KERNELDIR ?= $(shell printenv SUPPORT_ENV_KERNEL_DIR) 14 | 15 | # 指定交叉编译工具链 16 | CROSS_COMPILE ?= arm-none-linux-gnueabihf- 17 | 18 | ARCH ?= arm 19 | 20 | build: kernel_modules 21 | 22 | kernel_modules: 23 | $(info "platform:${ARCH}, COMPILE:${CROSS_COMPILE}") 24 | $(info "kernel_dir:${KERNELDIR}") 25 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} modules 26 | 27 | clean: 28 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean 29 | -------------------------------------------------------------------------------- /src/file/ch03-13/test/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # Build for module files. 4 | # Copyright (c) 2020-2023 5 | # Original Author: 1107473010@qq.com 6 | # 7 | ################################################################################ 8 | target = brightness_test 9 | object = brightness_test.o 10 | 11 | # 指定交叉编译工具链 12 | CRSOSS_COMPILE?= arm-none-linux-gnueabihf- 13 | 14 | all: $(target) 15 | 16 | $(target): $(object) 17 | $(CRSOSS_COMPILE)gcc -o $@ $^ 18 | 19 | # 定义c文件编译规则 20 | %.o: %.c 21 | $(CRSOSS_COMPILE)gcc -c $< -o $@ 22 | 23 | clean: 24 | rm -f $(target) $(object) -------------------------------------------------------------------------------- /src/file/ch03-14/iio_adc_temp/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # Build for module files. 4 | # Copyright (c) 2020-2023 5 | # Original Author: 1107473010@qq.com 6 | # 7 | ################################################################################ 8 | obj-m := kernel_iio_adc.o 9 | 10 | CURRENT_PATH := $(shell pwd) 11 | 12 | # 指定完成编译的内核源码路径 13 | KERNELDIR ?= $(shell printenv SUPPORT_ENV_KERNEL_DIR) 14 | 15 | # 指定交叉编译工具链 16 | CROSS_COMPILE ?= arm-none-linux-gnueabihf- 17 | 18 | ARCH ?= arm 19 | 20 | build: kernel_modules 21 | 22 | kernel_modules: 23 | $(info "platform:${ARCH}, COMPILE:${CROSS_COMPILE}") 24 | $(info "kernel_dir:${KERNELDIR}") 25 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} modules 26 | 27 | clean: 28 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean 29 | -------------------------------------------------------------------------------- /src/file/ch03-14/pwm_device/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # Build for module files. 4 | # Copyright (c) 2020-2023 5 | # Original Author: 1107473010@qq.com 6 | # 7 | ################################################################################ 8 | obj-m := kernel_pwm.o 9 | 10 | CURRENT_PATH := $(shell pwd) 11 | 12 | # 指定完成编译的内核源码路径 13 | KERNELDIR ?= $(shell printenv SUPPORT_ENV_KERNEL_DIR) 14 | 15 | # 指定交叉编译工具链 16 | CROSS_COMPILE ?= arm-none-linux-gnueabihf- 17 | 18 | ARCH ?= arm 19 | 20 | build: kernel_modules 21 | 22 | kernel_modules: 23 | $(info "platform:${ARCH}, COMPILE:${CROSS_COMPILE}") 24 | $(info "kernel_dir:${KERNELDIR}") 25 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} modules 26 | 27 | clean: 28 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean 29 | -------------------------------------------------------------------------------- /src/file/ch03-14/thermal_cooling/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # Build for module files. 4 | # Copyright (c) 2020-2023 5 | # Original Author: 1107473010@qq.com 6 | # 7 | ################################################################################ 8 | obj-m := thermal_fan.o 9 | 10 | CURRENT_PATH := $(shell pwd) 11 | 12 | # 指定完成编译的内核源码路径 13 | KERNELDIR ?= $(shell printenv SUPPORT_ENV_KERNEL_DIR) 14 | 15 | # 指定交叉编译工具链 16 | CROSS_COMPILE ?= arm-none-linux-gnueabihf- 17 | 18 | ARCH ?= arm 19 | 20 | build: kernel_modules 21 | 22 | kernel_modules: 23 | $(info "platform:${ARCH}, COMPILE:${CROSS_COMPILE}") 24 | $(info "kernel_dir:${KERNELDIR}") 25 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} modules 26 | 27 | clean: 28 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean 29 | -------------------------------------------------------------------------------- /src/file/ch03-14/thermal_zone/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # Build for module files. 4 | # Copyright (c) 2020-2023 5 | # Original Author: 1107473010@qq.com 6 | # 7 | ################################################################################ 8 | obj-m := thermal_sensor.o 9 | 10 | CURRENT_PATH := $(shell pwd) 11 | 12 | # 指定完成编译的内核源码路径 13 | KERNELDIR ?= $(shell printenv SUPPORT_ENV_KERNEL_DIR) 14 | 15 | # 指定交叉编译工具链 16 | CROSS_COMPILE ?= arm-none-linux-gnueabihf- 17 | 18 | ARCH ?= arm 19 | 20 | build: kernel_modules 21 | 22 | kernel_modules: 23 | $(info "platform:${ARCH}, COMPILE:${CROSS_COMPILE}") 24 | $(info "kernel_dir:${KERNELDIR}") 25 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} modules 26 | 27 | clean: 28 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean 29 | -------------------------------------------------------------------------------- /src/file/ch03-15/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # Build for module files. 4 | # Copyright (c) 2020-2023 5 | # Original Author: 1107473010@qq.com 6 | # 7 | ################################################################################ 8 | obj-m := kernel_wdt.o 9 | 10 | CURRENT_PATH := $(shell pwd) 11 | 12 | # 指定完成编译的内核源码路径 13 | KERNELDIR ?= $(shell printenv SUPPORT_ENV_KERNEL_DIR) 14 | 15 | # 指定交叉编译工具链 16 | CROSS_COMPILE ?= arm-none-linux-gnueabihf- 17 | 18 | ARCH ?= arm 19 | 20 | build: kernel_modules 21 | 22 | kernel_modules: 23 | $(info "platform:${ARCH}, COMPILE:${CROSS_COMPILE}") 24 | $(info "kernel_dir:${KERNELDIR}") 25 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} modules 26 | 27 | clean: 28 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean 29 | -------------------------------------------------------------------------------- /src/file/ch03-15/test/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # Build for module files. 4 | # Copyright (c) 2020-2023 5 | # Original Author: 1107473010@qq.com 6 | # 7 | ################################################################################ 8 | target = wdt_test 9 | object = wdt_test.o 10 | 11 | # 指定交叉编译工具链 12 | CRSOSS_COMPILE?= arm-none-linux-gnueabihf- 13 | 14 | all: $(target) 15 | 16 | $(target): $(object) 17 | $(CRSOSS_COMPILE)gcc -o $@ $^ 18 | 19 | # 定义c文件编译规则 20 | %.o: %.c 21 | $(CRSOSS_COMPILE)gcc -c $< -o $@ 22 | 23 | clean: 24 | rm -f $(target) $(object) -------------------------------------------------------------------------------- /src/file/ch03-15/test/wdt_test.c: -------------------------------------------------------------------------------- 1 | /* 2 | * File : wdt_test.c 3 | * test for key driver. 4 | * COPYRIGHT (C) 2023, zc 5 | * 6 | * Change Logs: 7 | * Date Author Notes 8 | * 2023-11-22 zc the first version 9 | */ 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include 15 | #include 16 | #include 17 | #include 18 | 19 | static unsigned int flag = 0; 20 | 21 | #define WATCHDOG_DEVICE "/dev/watchdog1" 22 | 23 | int main(int argc, char *argv[]) 24 | { 25 | int wdt_fd; 26 | int timeout = 5; 27 | int ioctl_alive = 0; 28 | int ops; 29 | 30 | if (argc > 1) { 31 | ioctl_alive = atoi(argv[1]); 32 | } 33 | printf("ioctl_alive:%d\n", ioctl_alive); 34 | 35 | // open会直接开启对应的watchdog 36 | wdt_fd = open(WATCHDOG_DEVICE, O_RDWR | O_NONBLOCK); 37 | 38 | if (wdt_fd >= 0) 39 | { 40 | ioctl(wdt_fd, WDIOC_SETTIMEOUT, &timeout); 41 | 42 | while (!flag) 43 | { 44 | if (ioctl_alive == 0) { 45 | ioctl(wdt_fd, WDIOC_KEEPALIVE, NULL); 46 | } 47 | 48 | sleep(1); 49 | } 50 | 51 | // 关闭watchdog设备(需要驱动支持) 52 | ops = WDIOS_DISABLECARD; 53 | ioctl(wdt_fd, WDIOC_SETOPTIONS, &ops); 54 | close(wdt_fd); 55 | } 56 | 57 | return 0; 58 | } 59 | -------------------------------------------------------------------------------- /src/file/ch03-19/nvmem_drv/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # Build for module files. 4 | # Copyright (c) 2020-2023 5 | # Original Author: 1107473010@qq.com 6 | # 7 | ################################################################################ 8 | obj-m := kernel_nvmem.o 9 | FIRMWARE_CLEAN := 1 10 | 11 | include $(ENV_PATH_ROOT)/build/buildmod.mk -------------------------------------------------------------------------------- /src/file/ch03-19/nvmem_ref/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # Build for module files. 4 | # Copyright (c) 2020-2023 5 | # Original Author: 1107473010@qq.com 6 | # 7 | ################################################################################ 8 | obj-m := kernel_nvmem_ref.o 9 | FIRMWARE_CLEAN := 1 10 | 11 | include $(ENV_PATH_ROOT)/build/buildmod.mk -------------------------------------------------------------------------------- /src/file/ch03-19/test/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # Build for module files. 4 | # Copyright (c) 2020-2023 5 | # Original Author: 1107473010@qq.com 6 | # 7 | ################################################################################ 8 | BUILD =e 9 | 10 | c_objects = nvmem_test.o 11 | 12 | # This is the file name of the executables and path where 13 | # place the executables 14 | buildout = nvmem_test 15 | 16 | include $(ENV_PATH_ROOT)/build/buildrules.mk -------------------------------------------------------------------------------- /src/file/ch03-19/test/nvmem_test.c: -------------------------------------------------------------------------------- 1 | /* 2 | * File : nvmem_test.c 3 | * test for key driver. 4 | * COPYRIGHT (C) 2023, zc 5 | * 6 | * Change Logs: 7 | * Date Author Notes 8 | * 2023-11-22 zc the first version 9 | */ 10 | #include 11 | #include 12 | #include 13 | 14 | #define NVMEM_DEVICE_FILE "/sys/devices/platform/usr_nvmem/eeprom" 15 | 16 | int main(int argc, const char *argv[]) 17 | { 18 | char w_buffer[64]; 19 | char r_buffer[64] = {0}; 20 | int fd; 21 | int ret; 22 | 23 | fd = open(NVMEM_DEVICE_FILE, O_RDWR | O_NDELAY); 24 | if (fd == -1) { 25 | printf("open %s error", NVMEM_DEVICE_FILE); 26 | return -1; 27 | } 28 | 29 | // 写入数据 30 | for (int i = 0; i < 64; i++) { 31 | w_buffer[i] = i; 32 | } 33 | lseek(fd, 100, SEEK_SET); 34 | ret = write(fd, w_buffer, 64); 35 | if (ret < 0) { 36 | printf("write failed:%d\n", ret); 37 | goto __exit; 38 | } 39 | 40 | // 读取数据 41 | lseek(fd, 100, SEEK_SET); 42 | ret = read(fd, r_buffer, sizeof(r_buffer)); 43 | if (ret < 0) { 44 | printf("read failed:%d\n", ret); 45 | goto __exit; 46 | } 47 | 48 | // 比较数据 49 | for (int i = 0; i < 64; i++) { 50 | if (r_buffer[i] != w_buffer[i]) { 51 | printf("no equal, %d:%d\n", r_buffer[i], w_buffer[i]); 52 | goto __exit; 53 | } 54 | } 55 | 56 | printf("nvmem test success\n"); 57 | 58 | __exit: 59 | close(fd); 60 | return 0; 61 | } -------------------------------------------------------------------------------- /src/file/ch03-22/can_apps/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # 设置 CMake 最低版本要求 2 | cmake_minimum_required(VERSION 3.10) 3 | 4 | # 设置项目名称 5 | project(target) 6 | 7 | # 设置交叉编译工具链 8 | set(CMAKE_SYSTEM_NAME Linux) 9 | set(CMAKE_SYSTEM_PROCESSOR arm) 10 | set(CMAKE_C_COMPILER arm-none-linux-gnueabihf-gcc) 11 | set(CMAKE_CXX_COMPILER arm-none-linux-gnueabihf-g++) 12 | 13 | # 指定 C++ 标准 14 | set(CMAKE_CXX_STANDARD 11) 15 | set(CMAKE_CXX_STANDARD_REQUIRED True) 16 | 17 | # 添加可执行文件 18 | add_executable(target can_test.cpp) -------------------------------------------------------------------------------- /src/file/ch03-22/can_apps/can_test.cpp: -------------------------------------------------------------------------------- 1 | //////////////////////////////////////////////////////////////////////////// 2 | // (c) copyright 2024-by Persional Inc. 3 | // All Rights Reserved 4 | // 5 | // Name: 6 | // can_test.c 7 | // 8 | // Purpose: 9 | // 10 | // Author: 11 | // @听心跳的声音 12 | // 13 | // Assumptions: 14 | // 需要使能can支持(使用iproute2工具,busybox工具包中不支持can功能) 15 | // ip link set can0 type can bitrate 500000 16 | // ifconfig can0 up 17 | // Revision History: 18 | // 12/19/2022 Create New Version. 19 | // 23/08/202 Format update. 20 | ///////////////////////////////////////////////////////////////////////////// 21 | 22 | #include "can_socket.hpp" 23 | 24 | #define CAN_INTERFACE "can0" 25 | 26 | int main(int argc, char *argv[]) 27 | { 28 | can_socket manage; 29 | 30 | if (!manage.init()) { 31 | std::cout << "can init failed" << std::endl; 32 | return -1; 33 | } 34 | 35 | while (1) { 36 | std::this_thread::sleep_for(std::chrono::seconds(1)); 37 | } 38 | 39 | return 0; 40 | } -------------------------------------------------------------------------------- /src/file/ch03-33/no_queue/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # Build for module files. 4 | # Copyright (c) 2020-2023 5 | # Original Author: 1107473010@qq.com 6 | # 7 | ################################################################################ 8 | obj-m := ram_disk.o 9 | 10 | CURRENT_PATH := $(shell pwd) 11 | 12 | # 指定完成编译的内核源码路径 13 | KERNELDIR ?= $(shell printenv SUPPORT_ENV_KERNEL_DIR) 14 | 15 | # 指定交叉编译工具链 16 | CROSS_COMPILE ?= arm-none-linux-gnueabihf- 17 | 18 | ARCH ?= arm 19 | 20 | build: kernel_modules 21 | 22 | kernel_modules: 23 | $(info "platform:${ARCH}, COMPILE:${CROSS_COMPILE}") 24 | $(info "kernel_dir:${KERNELDIR}") 25 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} modules 26 | 27 | clean: 28 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean 29 | -------------------------------------------------------------------------------- /src/file/ch03-33/queue/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # Build for module files. 4 | # Copyright (c) 2020-2023 5 | # Original Author: 1107473010@qq.com 6 | # 7 | ################################################################################ 8 | obj-m := ram_disk_queue.o 9 | 10 | CURRENT_PATH := $(shell pwd) 11 | 12 | # 指定完成编译的内核源码路径 13 | KERNELDIR ?= $(shell printenv SUPPORT_ENV_KERNEL_DIR) 14 | 15 | # 指定交叉编译工具链 16 | CROSS_COMPILE ?= arm-none-linux-gnueabihf- 17 | 18 | ARCH ?= arm 19 | 20 | build: kernel_modules 21 | 22 | kernel_modules: 23 | $(info "platform:${ARCH}, COMPILE:${CROSS_COMPILE}") 24 | $(info "kernel_dir:${KERNELDIR}") 25 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} modules 26 | 27 | clean: 28 | $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean 29 | -------------------------------------------------------------------------------- /src/file/ch04-01/Makefile: -------------------------------------------------------------------------------- 1 | CUR_DIR := $(shell "pwd") 2 | INC_DIR := $(addsuffix /inc,$(CUR_DIR)) 3 | SRC := $(wildcard $(CUR_DIR)/*.c) 4 | OBJ := $(patsubst %.c,%.o,$(notdir $(SRC))) 5 | CC := gcc 6 | CFLAGS := -Wall -I$(INC_DIR) 7 | 8 | all: target 9 | 10 | %.o : %.c 11 | $(CC) $(CFLAGS) -c $< -o $@ 12 | 13 | target: $(OBJ) 14 | $(CC) $^ -o $@ 15 | 16 | clean: 17 | rm -rf $(OBJ) -------------------------------------------------------------------------------- /src/file/ch04-01/dir_api.c: -------------------------------------------------------------------------------- 1 | /* 2 | dir接口 3 | opendir 打开指定目录,获取目录指针 4 | mkdir 创建目录 5 | readdir 读取子目录的句柄 6 | closedir 关闭打开的目录 7 | */ 8 | #include 9 | #include 10 | #include 11 | 12 | #define TEST_DIR "test" 13 | 14 | int process_dir(void) 15 | { 16 | DIR *pDir; 17 | struct dirent *pdirent; 18 | 19 | pDir = opendir(TEST_DIR); 20 | if(pDir == NULL) 21 | { 22 | printf("dir %s not exist, create!", TEST_DIR); 23 | mkdir(TEST_DIR, 0755); 24 | pDir = opendir(TEST_DIR); 25 | if(pDir == NULL) 26 | { 27 | printf("dir %s not exist, failed!", TEST_DIR); 28 | return -1; 29 | } 30 | } 31 | else 32 | { 33 | printf("dir exist, info:%s\n", TEST_DIR); 34 | } 35 | 36 | while((pdirent = readdir(pDir)) != NULL) 37 | { 38 | printf("%s\n", pdirent->d_name); 39 | } 40 | closedir(pDir); 41 | 42 | return 0; 43 | } -------------------------------------------------------------------------------- /src/file/ch04-01/main.c: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | 4 | extern int process_dir(void); 5 | 6 | int main(int argc, char *argv[]) 7 | { 8 | process_dir(); 9 | 10 | return 0; 11 | } -------------------------------------------------------------------------------- /src/file/ch04-01/process_api.c: -------------------------------------------------------------------------------- 1 | /* 2 | * 多进程接口 3 | * fork 系统调用创建和原进程资源一致的的新进程(会复制资源重新分配) 4 | * exec 系列函数用于在进程上下文执行一个新程序,包含execl, execv, execle, execve, execlp和execvp. 5 | * wait和waitpid, 这两个函数用于让父进程等待子进程的结束。wait()函数会阻塞父进程,直到它的一个子进程结束。waitpid()函数提供了更多的选项,允许父进程等待特定的子进程或一组子进程 6 | * getpid/getppid 获取当前进程/父进程的pid信息 7 | * nice/setpriority 这些函数用于设置进程的调度优先级 8 | * exit()和_exit() 这两个函数用于终止进程。exit()函数在退出前会执行一些清理工作(如调用已注册的atexit()函数),而_exit()函数则立即终止进程 9 | * kill():发送信号到进程。可以用来终止进程、请求进程执行某些操作等。 10 | * signal()和sigaction():用于设置进程接收到特定信号时的处理动作 11 | */ 12 | #include 13 | #include 14 | #include 15 | #include -------------------------------------------------------------------------------- /src/file/ch04-01/test/test.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/file/ch04-01/test/test.txt -------------------------------------------------------------------------------- /src/file/ch04-02/coredump/Makefile: -------------------------------------------------------------------------------- 1 | 2 | EXCUTABLE ?= target 3 | 4 | OBJECTS = crash_test.o 5 | 6 | INCLUDE_PATH = 7 | 8 | #-g表示支持调试 9 | CFLAGS += -O0 -lm -g 10 | CPPFLAGS += -std=c++2a -O0 -g 11 | 12 | CC := gcc 13 | CCPLUS := g++ 14 | 15 | all : $(EXCUTABLE) 16 | 17 | %.o : %.c 18 | $(CC) $(INCLUDE_PATH) $(CFLAGS) -c $< -o $@ 19 | 20 | %.o : %.cpp 21 | $(CCPLUS) $(INCLUDE_PATH) $(CPPFLAGS) -c $< -o $@ 22 | 23 | $(EXCUTABLE):$(OBJECTS) 24 | $(CCPLUS) -o $(EXCUTABLE) $(OBJECTS) $(CFLAGS) 25 | 26 | clean: 27 | rm -rf $(EXCUTABLE) 28 | rm -rf $(OBJECTS) -------------------------------------------------------------------------------- /src/file/ch04-02/coredump/crash_test.cpp: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | #include 4 | 5 | int main(int argc, char *argv[]) 6 | { 7 | int *p = nullptr; 8 | std::vector vec; 9 | 10 | std::cout<<"start run crash!"; 11 | 12 | p = new int(5); 13 | *p = 5; 14 | 15 | delete p; 16 | p = nullptr; 17 | 18 | vec.push_back(p); 19 | 20 | std::cout<<*vec[0]< 3 | 4 | int test_file_process(int val) 5 | { 6 | int num = val; 7 | printf("this is test file!\n"); 8 | printf("input num: %d\n", num); 9 | printf("used for debug!\n"); 10 | return 0; 11 | } -------------------------------------------------------------------------------- /src/file/ch04-02/vscode_local_gdb/application/test_file.h: -------------------------------------------------------------------------------- 1 | #ifndef _TEST_FILE_H 2 | #define _TEST_FILE_H 3 | 4 | int test_file_process(int val); 5 | 6 | #endif 7 | -------------------------------------------------------------------------------- /src/file/ch04-02/vscode_local_gdb/main.c: -------------------------------------------------------------------------------- 1 | 2 | 3 | #include 4 | #include "application/test_file.h" 5 | 6 | int main(int argc, char *argv[]) 7 | { 8 | int val = 5; 9 | 10 | printf("arg num: %d, %s, %s\n", argc, argv[1], argv[2]); 11 | 12 | test_file_process(val); 13 | 14 | return 0; 15 | } -------------------------------------------------------------------------------- /src/file/ch04-02/vscode_remote_gdb/.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2.0", 3 | "configurations": [ 4 | { 5 | "name": "(gdb) Launch Remote", 6 | "type": "cppdbg", 7 | "request": "launch", 8 | "args": [], 9 | "cwd": "${workspaceFolder}", 10 | "stopAtEntry": true, 11 | "program": "${workspaceFolder}/target", 12 | "setupCommands": [ 13 | { 14 | "text": "-enable-pretty-printing", 15 | "description": "Enable GDB pretty printing", 16 | "ignoreFailures": true 17 | } 18 | ], 19 | //"preLaunchTask": "build", //指定调试前执行的任务,查看tasks中的build变量 20 | "miDebuggerPath": "arm-none-linux-gnueabihf-gdb", //指定调试工具,本地用gdb, 跨平台用对应的调试器 21 | "miDebuggerServerAddress": "192.168.2.99:1234", //指定gdbserver连接端口,用于配合gdbserver调试 22 | } 23 | ] 24 | } -------------------------------------------------------------------------------- /src/file/ch04-02/vscode_remote_gdb/.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | "tasks": [ 3 | { 4 | "label": "build", //任务名称,其它任务请求使用 5 | "type": "shell", //任务类型,shell表示执行命令行语句 6 | "command": "make", //执行make命令 7 | "args": [ 8 | "-j2", //执行make命令附带参数,make -j2 9 | ], 10 | "group": { 11 | "kind": "build", 12 | "isDefault": true 13 | }, 14 | "problemMatcher": "$gcc", //问题匹配器,异常指定输出gcc相关的问题 15 | "detail": "Task generated by Debugger." 16 | } 17 | ], 18 | "version": "2.0.0" 19 | } -------------------------------------------------------------------------------- /src/file/ch04-02/vscode_remote_gdb/Makefile: -------------------------------------------------------------------------------- 1 | 2 | EXCUTABLE ?= target 3 | 4 | OBJECTS = main.o application/test_file.o 5 | 6 | INCLUDE_PATH = 7 | 8 | #-g表示支持调试 9 | CFLAGS += -O1 -lm -g 10 | 11 | CROSS_COMILE := arm-none-linux-gnueabihf- 12 | 13 | CC := ${CROSS_COMILE}gcc 14 | 15 | all : $(EXCUTABLE) 16 | 17 | %.o : %.c 18 | $(CC) $(INCLUDE_PATH) $(CFLAGS) -c $< -o $@ 19 | 20 | $(EXCUTABLE):$(OBJECTS) 21 | $(CC) -o $(EXCUTABLE) $(OBJECTS) $(CFLAGS) 22 | 23 | clean: 24 | rm -rf $(EXCUTABLE) 25 | rm -rf $(OBJECTS) -------------------------------------------------------------------------------- /src/file/ch04-02/vscode_remote_gdb/application/test_file.c: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | 4 | int test_file_process(int val) 5 | { 6 | int num = val; 7 | printf("this is test file!\n"); 8 | printf("input num: %d\n", num); 9 | printf("used for debug!\n"); 10 | return 0; 11 | } -------------------------------------------------------------------------------- /src/file/ch04-02/vscode_remote_gdb/application/test_file.h: -------------------------------------------------------------------------------- 1 | #ifndef _TEST_FILE_H 2 | #define _TEST_FILE_H 3 | 4 | int test_file_process(int val); 5 | 6 | #endif 7 | -------------------------------------------------------------------------------- /src/file/ch04-02/vscode_remote_gdb/main.c: -------------------------------------------------------------------------------- 1 | 2 | 3 | #include 4 | #include "application/test_file.h" 5 | 6 | int main(int argc, char *argv[]) 7 | { 8 | int val = 5; 9 | 10 | test_file_process(val); 11 | 12 | return 0; 13 | } -------------------------------------------------------------------------------- /src/file/ch04-03/posix_timer/test: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/file/ch04-03/posix_timer/test -------------------------------------------------------------------------------- /src/file/ch04-05/01-pipe/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # 设置 CMake 最低版本要求 2 | cmake_minimum_required(VERSION 3.16) 3 | 4 | # 设置项目名称 5 | project(target) 6 | 7 | # 添加可执行文件 8 | add_executable(target main.c) 9 | -------------------------------------------------------------------------------- /src/file/ch04-05/02-fifo/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # 设置 CMake 最低版本要求 2 | cmake_minimum_required(VERSION 3.16) 3 | 4 | # 设置项目名称 5 | project(target) 6 | 7 | # 添加可执行文件 8 | add_executable(target main.c) 9 | -------------------------------------------------------------------------------- /src/file/ch04-05/03-signal/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # 设置 CMake 最低版本要求 2 | cmake_minimum_required(VERSION 3.16) 3 | 4 | # 设置项目名称 5 | project(target) 6 | 7 | # 添加可执行文件 8 | add_executable(target main.c) 9 | -------------------------------------------------------------------------------- /src/file/ch04-05/04-mq/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # 设置 CMake 最低版本要求 2 | cmake_minimum_required(VERSION 3.16) 3 | 4 | # 设置项目名称 5 | project(target) 6 | 7 | # 添加可执行文件 8 | add_executable(target main.c) 9 | -------------------------------------------------------------------------------- /src/file/ch04-05/05-sv_sem/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # 设置 CMake 最低版本要求 2 | cmake_minimum_required(VERSION 3.16) 3 | 4 | # 设置项目名称 5 | project(target) 6 | 7 | # 添加可执行文件 8 | add_executable(target main.c) 9 | 10 | target_link_libraries(target PRIVATE pthread) -------------------------------------------------------------------------------- /src/file/ch04-05/06-px_sem/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # 设置 CMake 最低版本要求 2 | cmake_minimum_required(VERSION 3.16) 3 | 4 | # 设置项目名称 5 | project(target) 6 | 7 | # 添加可执行文件 8 | add_executable(target main.c) 9 | 10 | target_link_libraries(target PRIVATE pthread) -------------------------------------------------------------------------------- /src/file/ch04-05/06-px_sem/main.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | static int index = 0; 8 | sem_t semaphore; 9 | 10 | void *thread_loop_func0(void *arg) 11 | { 12 | for (int i = 0; i < 10; i++) { 13 | sem_wait(&semaphore); 14 | index += 1; 15 | printf("thread0 index = %d\n", index); 16 | sem_post(&semaphore); 17 | usleep(100); 18 | } 19 | 20 | pthread_exit(NULL); //线程退出(非阻塞) 21 | } 22 | 23 | void *thread_loop_func1(void *arg) 24 | { 25 | for (int i = 0; i < 10; i++) { 26 | sem_wait(&semaphore); 27 | index += 1; 28 | printf("thread1 index = %d\n", index); 29 | sem_post(&semaphore); 30 | usleep(100); 31 | } 32 | 33 | pthread_exit(NULL); //线程退出(非阻塞) 34 | } 35 | 36 | 37 | int main(int argc, char *argv[]) 38 | { 39 | pthread_t thread0, thread1; 40 | 41 | // 初始化信号量,初始值为 1 42 | if (sem_init(&semaphore, 0, 1) != 0) { 43 | perror("sem_init"); 44 | return 1; 45 | } 46 | 47 | pthread_create(&thread0, NULL, thread_loop_func0, NULL); 48 | pthread_create(&thread1, NULL, thread_loop_func1, NULL); 49 | 50 | pthread_join(thread0, NULL); 51 | pthread_join(thread1, NULL); 52 | 53 | // 删除信号量集 54 | printf("index = %d\n", index); 55 | if (sem_destroy(&semaphore) != 0) { 56 | perror("sem_destroy"); 57 | return 1; 58 | } 59 | 60 | return 0; 61 | } 62 | -------------------------------------------------------------------------------- /src/file/ch04-05/07-shm/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # 设置 CMake 最低版本要求 2 | cmake_minimum_required(VERSION 3.16) 3 | 4 | # 设置项目名称 5 | project(target) 6 | 7 | # 添加可执行文件 8 | add_executable(target main.c) 9 | 10 | target_link_libraries(target PRIVATE pthread) -------------------------------------------------------------------------------- /src/file/ch04-05/08-iommap/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # 设置 CMake 最低版本要求 2 | cmake_minimum_required(VERSION 3.16) 3 | 4 | # 设置项目名称 5 | project(target) 6 | 7 | # 添加可执行文件 8 | add_executable(target main.c) 9 | 10 | target_link_libraries(target PRIVATE pthread) -------------------------------------------------------------------------------- /src/file/ch04-07/Makefile: -------------------------------------------------------------------------------- 1 | CUR_DIR := $(shell "pwd") 2 | INC_DIR := $(addsuffix /inc,$(CUR_DIR)) 3 | SRC := $(wildcard $(CUR_DIR)/*.c) $(wildcard $(CUR_DIR)/*.cpp) 4 | OBJ := $(patsubst %.c,%.o,$(notdir $(SRC))) 5 | CC := gcc 6 | CCPLUS := g++ 7 | CFLAGS := -Wall -I$(INC_DIR) -lpthread -std=c++2a 8 | 9 | all: target 10 | 11 | %.o : %.c 12 | $(CC) $(CFLAGS) -c $< -o $@ 13 | 14 | %.o : %.cpp 15 | $(CCPLUS) $(CFLAGS) -c $< -o $@ 16 | 17 | target: $(OBJ) 18 | $(CCPLUS) $^ -o $@ 19 | 20 | clean: 21 | rm -rf target *.o -------------------------------------------------------------------------------- /src/file/ch04-07/www/css/global.css: -------------------------------------------------------------------------------- 1 | html body{ 2 | position: relative; 3 | background-color:rgb(255, 255, 255); 4 | color:black; 5 | margin:0px; 6 | padding: 0px; 7 | height: 100%; 8 | min-width: 1000px; 9 | } 10 | 11 | .segregate{ 12 | margin-top:20px; 13 | padding-left:40px; 14 | width:600px; 15 | height: 250px; 16 | font-size: 14px; 17 | } 18 | 19 | .btnCss{ 20 | justify-content: center; 21 | align-items: center; 22 | 23 | box-sizing: border-box; 24 | width: 85px; 25 | height: 20px; 26 | 27 | text-decoration: none; 28 | border: solid 1px #000; 29 | border-radius: 6px; 30 | background: #d8da7d; 31 | } 32 | 33 | .menu{ 34 | border-top-right-radius: 15px; 35 | border-top-left-radius:15px; 36 | float: left; 37 | background: transparent none repeat scroll 0% 0%; 38 | color: #000; 39 | font-family: verdana,arial,sans-serif; 40 | font-size: 13px; 41 | margin-top: 20px; 42 | height: 20px; 43 | padding-top: 5px; 44 | margin-left:2px; 45 | display: inline; 46 | width:80px; 47 | text-align: center; 48 | background-color: #DFDFDF; 49 | } 50 | 51 | [v-cloak]{ 52 | display:none; 53 | } 54 | 55 | .tableList{ 56 | border-width: 1px; 57 | padding: 0px; 58 | margin: 0px; 59 | border-spacing: 4px; 60 | } 61 | 62 | #menu_block{ 63 | height:45px; 64 | border-style: none; 65 | border-bottom: 3px solid #28aaa4; 66 | } 67 | 68 | #info_block{ 69 | position: absolute; 70 | top:50px; 71 | bottom:0px; 72 | width:75%; 73 | } -------------------------------------------------------------------------------- /src/file/ch04-08/01.fb_signal/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # CMakeLists.txt 2 | # 设置 CMake 最低版本要求 3 | cmake_minimum_required(VERSION 3.16) 4 | 5 | # 设置项目名称 6 | project(target) 7 | 8 | set(CMAKE_C_STANDARD 11) 9 | set(CMAKE_C_STANDARD_REQUIRED True) 10 | set(CMAKE_C_EXTENSIONS OFF) 11 | 12 | set(opt_dir "/home/freedom/Desktop/Project/t113-build/tina5.0_v1.0/out/t113_i/tlt113-minievm-emmc/buildroot/buildroot/host/bin") 13 | 14 | set(CMAKE_SYSTEM_NAME Linux) 15 | set(CMAKE_SYSTEM_PROCESSOR arm) 16 | set(CMAKE_C_COMPILER ${opt_dir}/arm-linux-gnueabi-gcc) 17 | set(CMAKE_CXX_COMPILER ${opt_dir}/arm-linux-gnueabi-g++) 18 | 19 | # 生成可执行文件 20 | add_executable(target main.c) 21 | 22 | target_link_libraries(target PRIVATE m) -------------------------------------------------------------------------------- /src/file/ch04-08/02.fb_multi_cache/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # CMakeLists.txt 2 | # 设置 CMake 最低版本要求 3 | cmake_minimum_required(VERSION 3.16) 4 | 5 | # 设置项目名称 6 | project(target) 7 | 8 | set(CMAKE_C_STANDARD 11) 9 | set(CMAKE_C_STANDARD_REQUIRED True) 10 | set(CMAKE_C_EXTENSIONS OFF) 11 | 12 | set(CMAKE_SYSTEM_NAME Linux) 13 | set(CMAKE_SYSTEM_PROCESSOR arm) 14 | 15 | set(CMAKE_C_COMPILER arm-none-linux-gnueabihf-gcc) 16 | set(CMAKE_CXX_COMPILER arm-none-linux-gnueabihf-g++) 17 | 18 | # set(opt_dir "/home/freedom/Desktop/Project/t113-build/tina5.0_v1.0/out/t113_i/tlt113-minievm-emmc/buildroot/buildroot/host/bin") 19 | # set(CMAKE_C_COMPILER ${opt_dir}/arm-linux-gnueabi-gcc) 20 | # set(CMAKE_CXX_COMPILER ${opt_dir}/arm-linux-gnueabi-g++) 21 | 22 | # 生成可执行文件 23 | add_executable(target main.c) 24 | 25 | target_link_libraries(target PRIVATE m) -------------------------------------------------------------------------------- /src/file/ch04-08/03.fb_graphic/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # CMakeLists.txt 2 | # 设置 CMake 最低版本要求 3 | cmake_minimum_required(VERSION 3.16) 4 | 5 | # 设置项目名称 6 | project(target) 7 | 8 | set(CMAKE_C_STANDARD 11) 9 | set(CMAKE_C_STANDARD_REQUIRED True) 10 | set(CMAKE_C_EXTENSIONS OFF) 11 | 12 | set(CMAKE_SYSTEM_NAME Linux) 13 | set(CMAKE_SYSTEM_PROCESSOR arm) 14 | 15 | set(opt_dir "/home/freedom/Desktop/Project/t113-build/tina5.0_v1.0/out/t113_i/tlt113-minievm-emmc/buildroot/buildroot/host/bin") 16 | set(CMAKE_C_COMPILER ${opt_dir}/arm-linux-gnueabi-gcc) 17 | set(CMAKE_CXX_COMPILER ${opt_dir}/arm-linux-gnueabi-g++) 18 | # set(CMAKE_C_COMPILER arm-none-linux-gnueabihf-gcc) 19 | # set(CMAKE_CXX_COMPILER arm-none-linux-gnueabihf-g++) 20 | 21 | # 生成可执行文件 22 | add_executable(target main.c fb_char.c) 23 | 24 | target_link_libraries(target PRIVATE m) -------------------------------------------------------------------------------- /src/file/ch04-08/03.fb_graphic/fb_graphic.h: -------------------------------------------------------------------------------- 1 | #ifndef FB_GRAPHIC_H 2 | #define FB_GRAPHIC_H 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | 14 | typedef enum 15 | { 16 | FB_PAGE_0 = 0, 17 | FB_PAGE_1, 18 | FB_PAGE_NUM 19 | }FB_PAGE; 20 | 21 | typedef struct 22 | { 23 | int fd; // 帧缓冲设备文件描述符 24 | uint32_t *fbp; // 显存起始地址 25 | FB_PAGE page; // 显存页 26 | size_t page_size; // 单个页面显存大小(width*height*bytes_per_pixel) 27 | size_t width; // 界面宽度 28 | size_t height; // 界面高度 29 | size_t screen_size; // 单个页面的尺寸(width*height) 30 | struct fb_var_screeninfo fb_var; // 显存变量信息 31 | struct fb_fix_screeninfo fb_fix; // 显存固定信息 32 | }FB_INFO; 33 | 34 | void lcd_draw_string(FB_INFO *p_info, uint32_t x, uint32_t y, char *p, uint32_t color); 35 | #endif 36 | -------------------------------------------------------------------------------- /src/file/ch04-08/04.fb_cpp/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # CMakeLists.txt 2 | # 设置 CMake 最低版本要求 3 | cmake_minimum_required(VERSION 3.16) 4 | 5 | # 设置项目名称 6 | project(target) 7 | 8 | set(CMAKE_C_STANDARD 11) 9 | set(CMAKE_C_STANDARD_REQUIRED True) 10 | set(CMAKE_C_EXTENSIONS OFF) 11 | 12 | set(CMAKE_SYSTEM_NAME Linux) 13 | set(CMAKE_SYSTEM_PROCESSOR arm) 14 | 15 | set(opt_dir "/home/freedom/Desktop/Project/t113-build/tina5.0_v1.0/out/t113_i/tlt113-minievm-emmc/buildroot/buildroot/host/bin") 16 | set(CMAKE_C_COMPILER ${opt_dir}/arm-linux-gnueabi-gcc) 17 | set(CMAKE_CXX_COMPILER ${opt_dir}/arm-linux-gnueabi-g++) 18 | # set(CMAKE_C_COMPILER arm-none-linux-gnueabihf-gcc) 19 | # set(CMAKE_CXX_COMPILER arm-none-linux-gnueabihf-g++) 20 | 21 | # 生成可执行文件 22 | add_executable(target main.cpp fb_draw.cpp) 23 | 24 | target_link_libraries(target PRIVATE m) -------------------------------------------------------------------------------- /src/file/ch04-08/04.fb_cpp/main.cpp: -------------------------------------------------------------------------------- 1 | #include "fb_draw.hpp" 2 | 3 | int main(void) 4 | { 5 | fb_manage fbm; 6 | bool res; 7 | uint8_t index; 8 | uint32_t width, height; 9 | 10 | res = fbm.init(FB_DEVICE); 11 | if (res == false) { 12 | return -1; 13 | } 14 | 15 | width = fbm.get_width(); 16 | height = fbm.get_height(); 17 | 18 | for (index=0; index=10; index++) { 19 | // 绘制第一块显存, 切换到第一个界面 20 | fbm.lcd_fill(0, width, 0, height, 0xFF000000); 21 | for (index=0; index<10; index++) { 22 | fbm.lcd_draw_rectangle(width/2-index*20, height/2-index*20, width/2+index*20, height/2+index*20, 0xFFFFFFFF); 23 | } 24 | fbm.lcd_draw_line(0, height/2, 1, width, 0xFFFFFFFF); 25 | fbm.lcd_draw_line(width/2, 0, 0, height, 0xFFFFFFFF); 26 | fbm.lcd_draw_antialiased_circle(width/2, height/2, 150, 0xFFFFFFFF); 27 | fbm.lcd_draw_antialiased_circle(width/2, height/2, 200, 0xFFFFFFFF); 28 | fbm.lcd_switch_hw_page(); 29 | sleep(1); 30 | 31 | // 绘制第二块显存, 切换到第二个界面 32 | fbm.lcd_fill(0, width, 0, height, 0xFFFFFF00); 33 | fbm.lcd_switch_hw_page(); 34 | sleep(1); 35 | } 36 | 37 | fbm.release(); 38 | 39 | return 0; 40 | } 41 | -------------------------------------------------------------------------------- /src/file/ch04-12/mqtt_node_0/Makefile: -------------------------------------------------------------------------------- 1 | #variable 2 | #定义编译的生成可执行文件名 3 | EXCUTABLE ?= mqtt_node0 4 | OBJECTS = mqtt_node.o 5 | INCLUDE_PATH = 6 | CFLAGS += -O1 -lm -lmosquitto -lmosquittopp -std=c++17 7 | CC ?= gcc 8 | CCPLUS ?= g++ 9 | 10 | all : $(EXCUTABLE) 11 | 12 | %.o : %.c 13 | $(CC) $(INCLUDE_PATH) $(CFLAGS) -c $< -o $@ 14 | 15 | %.o : %.cpp 16 | $(CCPLUS) $(INCLUDE_PATH) $(CFLAGS) -c $< -o $@ 17 | 18 | $(EXCUTABLE):$(OBJECTS) 19 | $(CCPLUS) -o $(EXCUTABLE) $(OBJECTS) $(CFLAGS) 20 | 21 | clean: 22 | rm -rf $(EXCUTABLE) 23 | rm -rf $(OBJECTS) -------------------------------------------------------------------------------- /src/file/ch04-12/mqtt_node_1/Makefile: -------------------------------------------------------------------------------- 1 | #variable 2 | #定义编译的生成可执行文件名 3 | EXCUTABLE ?= mqtt_node1 4 | OBJECTS = mqtt_node.o 5 | INCLUDE_PATH = 6 | CFLAGS += -O1 -lm -lmosquitto -lmosquittopp -std=c++17 7 | CC ?= gcc 8 | CCPLUS ?= g++ 9 | 10 | all : $(EXCUTABLE) 11 | 12 | %.o : %.c 13 | $(CC) $(INCLUDE_PATH) $(CFLAGS) -c $< -o $@ 14 | 15 | %.o : %.cpp 16 | $(CCPLUS) $(INCLUDE_PATH) $(CFLAGS) -c $< -o $@ 17 | 18 | $(EXCUTABLE):$(OBJECTS) 19 | $(CCPLUS) -o $(EXCUTABLE) $(OBJECTS) $(CFLAGS) 20 | 21 | clean: 22 | rm -rf $(EXCUTABLE) 23 | rm -rf $(OBJECTS) -------------------------------------------------------------------------------- /src/file/ch04-12/mqtt_paho/mqtt_client.py: -------------------------------------------------------------------------------- 1 | # !/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | import paho.mqtt.client as mqtt 4 | import time 5 | 6 | mqtt_client = mqtt.Client() 7 | 8 | # 连接成功回调 9 | def on_connect(client, userdata, flags, rc): 10 | if rc == 0: 11 | print("Connected with result code " + str(rc)) 12 | # 连接成功后订阅主题 13 | client.subscribe("/topic/temperature") 14 | else: 15 | print(f"Failed to connect, return code {rc}") 16 | 17 | # 接收到消息回调 18 | def on_message(client, userdata, msg): 19 | print(f"Received message on topic '{msg.topic}': {msg.payload.decode()}") 20 | 21 | mqtt_client.on_connect = on_connect 22 | mqtt_client.on_message = on_message 23 | 24 | broker_address = "localhost" 25 | broker_port = 1883 26 | mqtt_client.connect(broker_address, broker_port) 27 | 28 | mqtt_client.loop_start() 29 | 30 | try: 31 | while True: 32 | # 发送消息 33 | mqtt_client.publish("test/topic", "Hello World!") 34 | time.sleep(5) 35 | except KeyboardInterrupt: 36 | print("Disconnecting from MQTT broker...") 37 | mqtt_client.loop_stop() 38 | mqtt_client.disconnect() 39 | -------------------------------------------------------------------------------- /src/file/ch04-13/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "files.associations": { 3 | "*.cmd": "shellscript", 4 | "*.tcc": "cpp" 5 | } 6 | } -------------------------------------------------------------------------------- /src/file/ch04-13/libmodbus_m/Makefile: -------------------------------------------------------------------------------- 1 | #variable 2 | 3 | EXCUTABLE ?= target 4 | 5 | OBJECTS = main.o 6 | 7 | #包含需要访问的文件头目录 8 | INCLUDE_PATH = 9 | 10 | #支持的C编译选项 11 | CFLAGS += -O1 -lm -g -lpthread -lmodbus 12 | CPPFLAGS += -O1 -lm -g -lpthread -lmodbus 13 | 14 | #指定编译工具 15 | CC ?= gcc 16 | CCPLUS ?= g++ 17 | 18 | all : $(EXCUTABLE) 19 | 20 | %.o : %.c 21 | $(CC) $(INCLUDE_PATH) $(CFLAGS) -c $< -o $@ 22 | 23 | %.o : %.cpp 24 | $(CCPLUS) $(INCLUDE_PATH) $(CPPFLAGS) -c $< -o $@ 25 | 26 | $(EXCUTABLE):$(OBJECTS) 27 | $(CCPLUS) -o $(EXCUTABLE) $(OBJECTS) $(CPPFLAGS) 28 | rm -rf $(OBJECTS) 29 | 30 | clean: 31 | rm -rf $(EXCUTABLE) 32 | rm -rf $(OBJECTS) -------------------------------------------------------------------------------- /src/file/ch04-13/modbus_s/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # 设置 CMake 最低版本要求 2 | cmake_minimum_required(VERSION 3.10) 3 | 4 | # 设置项目名称 5 | project(target) 6 | 7 | # 设备交叉编译工具链 8 | set(CMAKE_SYSTEM_NAME Linux) 9 | 10 | # 指定 C++ 标准 11 | set(CMAKE_CXX_STANDARD 17) 12 | set(CMAKE_CXX_STANDARD_REQUIRED True) 13 | 14 | # 添加目录 15 | target_include_directories(event) 16 | target_include_directories(freemodbus/include) 17 | target_include_directories(freemodbus/ascii) 18 | target_include_directories(freemodbus/rtu) 19 | target_include_directories(freemodbus/tcp) 20 | target_include_directories(port) 21 | 22 | # 添加可执行文件 23 | 24 | ## 添加子目录的 CMakeLists.txt 25 | add_subdirectory(freemodbus) 26 | 27 | file(GLOB MAIN_SOURCES 28 | *.cpp 29 | port/*.cpp) 30 | 31 | set(ALL_SOURCES ${MAIN_SOURCES} ${FREEMODBUS_SOURCES}) 32 | 33 | add_executable(target ${ALL_SOURCES}) 34 | 35 | # 链接 pthread 和 math 库到目标可执行文件 36 | target_link_libraries(target PRIVATE pthread m) 37 | 38 | # 添加宏定义 39 | target_compile_definitions(target PRIVATE DEBUG_MODE) 40 | 41 | # 添加编译选项 42 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O1") 43 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O1") 44 | -------------------------------------------------------------------------------- /src/file/ch04-13/modbus_s/Makefile: -------------------------------------------------------------------------------- 1 | #variable 2 | 3 | EXCUTABLE ?= target 4 | 5 | OBJECTS = freemodbus/mb.o \ 6 | freemodbus/ascii/mbascii.o \ 7 | freemodbus/functions/mbfunccoils.o \ 8 | freemodbus/functions/mbfuncdiag.o \ 9 | freemodbus/functions/mbfuncdisc.o \ 10 | freemodbus/functions/mbfuncholding.o \ 11 | freemodbus/functions/mbfuncinput.o \ 12 | freemodbus/functions/mbfuncother.o \ 13 | freemodbus/functions/mbutils.o \ 14 | freemodbus/rtu/mbcrc.o \ 15 | freemodbus/rtu/mbrtu.o \ 16 | freemodbus/tcp/mbtcp.o \ 17 | port/portevent.o \ 18 | port/portserial.o \ 19 | port/porttimer.o \ 20 | port/fifo_manage.o \ 21 | port/porttcp.o \ 22 | main.o 23 | 24 | #包含需要访问的文件头目录 25 | INCLUDE_PATH = -I"port/" \ 26 | -I"event/" \ 27 | -I"../include/" \ 28 | -I"freemodbus/include/" \ 29 | -I"freemodbus/functions/" \ 30 | -I"freemodbus/rtu/" \ 31 | -I"freemodbus/ascii/" \ 32 | -I"freemodbus/tcp/" 33 | 34 | #支持的C编译选项 35 | CFLAGS += -O1 -lm -g -lpthread 36 | CPPFLAGS += -O1 -lm -g -lpthread 37 | 38 | #指定编译工具 39 | CC ?= gcc 40 | CCPLUS ?= g++ 41 | 42 | all : $(EXCUTABLE) 43 | 44 | %.o : %.c 45 | $(CC) $(INCLUDE_PATH) $(CFLAGS) -c $< -o $@ 46 | 47 | %.o : %.cpp 48 | $(CCPLUS) $(INCLUDE_PATH) $(CPPFLAGS) -c $< -o $@ 49 | 50 | $(EXCUTABLE):$(OBJECTS) 51 | $(CCPLUS) -o $(EXCUTABLE) $(OBJECTS) $(CFLAGS) 52 | rm -rf $(OBJECTS) 53 | 54 | clean: 55 | rm -rf $(EXCUTABLE) 56 | rm -rf $(OBJECTS) -------------------------------------------------------------------------------- /src/file/ch04-13/modbus_s/freemodbus/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | 2 | # 收集 lib 目录下的源文件 3 | file(GLOB FREEMODBUS_SOURCES 4 | "${CMAKE_CURRENT_SOURCE_DIR}/*.c" 5 | "${CMAKE_CURRENT_SOURCE_DIR}/ascii/*.c" 6 | "${CMAKE_CURRENT_SOURCE_DIR}/functions/*.c" 7 | "${CMAKE_CURRENT_SOURCE_DIR}/rtu/*.c*" 8 | "${CMAKE_CURRENT_SOURCE_DIR}/tcp/*.c*") 9 | 10 | # 将 LIB_SOURCES 变量传递给父级作用域 11 | set(FREEMODBUS_SOURCES ${FREEMODBUS_SOURCES} PARENT_SCOPE) 12 | -------------------------------------------------------------------------------- /src/file/ch04-13/modbus_s/restart.sh: -------------------------------------------------------------------------------- 1 | make -j6 2 | pkill -9 target 3 | 4 | sleep 1 5 | 6 | ./target & -------------------------------------------------------------------------------- /src/file/ch04-14/capature.py: -------------------------------------------------------------------------------- 1 | import cv2 2 | 3 | # 获取摄像头视频流(1对于/dev/video1) 4 | cam = cv2.VideoCapture(1) 5 | 6 | while (cam.isOpened()): 7 | 8 | # 读取图像并显示 9 | retval, img = cam.read() 10 | cv2.imshow("Video", img) 11 | 12 | # 等待按键结束 13 | key = cv2.waitKey(1) 14 | if key == 32: 15 | break 16 | 17 | capture.release() 18 | cv2.destroyAllWindows() -------------------------------------------------------------------------------- /src/file/ch04-x3/project-01/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # 设置 CMake 最低版本要求 2 | cmake_minimum_required(VERSION 3.16) 3 | 4 | # 设置项目名称 5 | project(target) 6 | 7 | # 添加可执行文件 8 | add_executable(target main.cpp) 9 | -------------------------------------------------------------------------------- /src/file/ch04-x3/project-01/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | int main(void) 6 | { 7 | cout << "Hello World!" << endl; 8 | return 0; 9 | } -------------------------------------------------------------------------------- /src/file/ch04-x3/project-02/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # 设置 CMake 最低版本要求 2 | cmake_minimum_required(VERSION 3.16) 3 | 4 | # 设置项目名称 5 | project(target) 6 | 7 | # 添加可执行文件 8 | add_executable(target main.cpp) 9 | 10 | # 添加C++版本要求 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED True) 13 | set(CMAKE_CXX_EXTENSIONS OFF) 14 | 15 | -------------------------------------------------------------------------------- /src/file/ch04-x3/project-02/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | int main(void) 6 | { 7 | cout<< __STDC_HOSTED__ << endl; 8 | cout<< __cplusplus << endl; 9 | cout << "Hello World!" << endl; 10 | return 0; 11 | } -------------------------------------------------------------------------------- /src/file/ch04-x3/project-03/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # 设置 CMake 最低版本要求 2 | cmake_minimum_required(VERSION 3.16) 3 | 4 | # 设置项目名称 5 | project(target) 6 | 7 | # 添加可执行文件 8 | add_executable(target) 9 | 10 | # 使用target_sources添加源文件 11 | target_sources(target PRIVATE main.cpp test.cpp) 12 | 13 | # 添加编译选项 14 | ## 指定 C++ 标准 15 | set(CMAKE_CXX_STANDARD 11) 16 | set(CMAKE_CXX_STANDARD_REQUIRED True) 17 | 18 | # 设置编译选项 19 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O1") 20 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O1") 21 | 22 | # 相当于-DDDEBUG_MODE -DDEBUG_SIZE=100 23 | target_compile_definitions(target PRIVATE DEBUG_MODE DEBUG_SIZE=100) 24 | 25 | -------------------------------------------------------------------------------- /src/file/ch04-x3/project-03/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | extern int test(void); 6 | 7 | int main(void) 8 | { 9 | test(); 10 | 11 | cout << "Hello World!" << endl; 12 | 13 | #ifdef DEBUG_MODE 14 | cout << "DEBUG_MODE is defined" << endl; 15 | #endif 16 | 17 | #ifdef DEBUG_SIZE 18 | cout << "DEBUG_SIZE is defined: " << DEBUG_SIZE << endl; 19 | #endif 20 | return 0; 21 | } -------------------------------------------------------------------------------- /src/file/ch04-x3/project-03/test.cpp: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | 4 | int test(void) 5 | { 6 | std::cout << "test!" << std::endl; 7 | return 0; 8 | } -------------------------------------------------------------------------------- /src/file/ch04-x3/project-04/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # 设置 CMake 最低版本要求 2 | cmake_minimum_required(VERSION 3.10) 3 | 4 | # 设置项目名称 5 | project(target) 6 | 7 | # 添加可执行文件 8 | file(GLOB_RECURSE SRC_FILES 9 | main.cpp 10 | lib/*.cpp 11 | ) 12 | add_executable(target) 13 | 14 | # 添加源文件 15 | target_sources(target PRIVATE ${SRC_FILES}) 16 | 17 | # 添加头文件 18 | target_include_directories(target PUBLIC lib) 19 | 20 | # 添加编译选项 21 | # 指定 C++ 标准 22 | set(CMAKE_CXX_STANDARD 11) 23 | set(CMAKE_CXX_STANDARD_REQUIRED True) 24 | 25 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Os") 26 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Os") -------------------------------------------------------------------------------- /src/file/ch04-x3/project-04/lib/main.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | int test1_func(); 6 | int test2_func(); 7 | int test3_func(); 8 | -------------------------------------------------------------------------------- /src/file/ch04-x3/project-04/lib/test1.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | int test1_func() 6 | { 7 | cout << "test1_func!" << endl; 8 | return 0; 9 | } -------------------------------------------------------------------------------- /src/file/ch04-x3/project-04/lib/test2.cpp: -------------------------------------------------------------------------------- 1 | #include "main.hpp" 2 | 3 | using namespace std; 4 | 5 | int test2_func() 6 | { 7 | cout << "test2_func!" << endl; 8 | return 0; 9 | } -------------------------------------------------------------------------------- /src/file/ch04-x3/project-04/lib/test3.cpp: -------------------------------------------------------------------------------- 1 | #include "main.hpp" 2 | 3 | using namespace std; 4 | 5 | int test3_func() 6 | { 7 | cout << "test3_func!" << endl; 8 | return 0; 9 | } -------------------------------------------------------------------------------- /src/file/ch04-x3/project-04/main.cpp: -------------------------------------------------------------------------------- 1 | #include "main.hpp" 2 | 3 | using namespace std; 4 | 5 | int main(void) 6 | { 7 | cout << "Hello World!" << endl; 8 | 9 | test1_func(); 10 | 11 | test2_func(); 12 | 13 | test3_func(); 14 | return 0; 15 | } -------------------------------------------------------------------------------- /src/file/ch04-x3/project-05/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # 设置 CMake 最低版本要求 2 | cmake_minimum_required(VERSION 3.10) 3 | 4 | # 设置项目名称 5 | project(target) 6 | 7 | # 指定 C++ 标准 8 | set(CMAKE_CXX_STANDARD 17) 9 | set(CMAKE_CXX_STANDARD_REQUIRED True) 10 | 11 | # 添加可执行文件 12 | # 添加子目录的 CMakeLists.txt 13 | add_subdirectory(lib) 14 | 15 | file(GLOB MAIN_SOURCES 16 | "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp") 17 | 18 | add_executable(target) 19 | 20 | # 添加本地和子目录的源文件 21 | target_sources(target PRIVATE ${MAIN_SOURCES} ${LIB_SOURCES}) 22 | 23 | # 添加子目录 24 | target_include_directories(target PRIVATE ${INCLUDE_HEADERS}) 25 | 26 | # 添加编译选项 27 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Os") 28 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Os") 29 | -------------------------------------------------------------------------------- /src/file/ch04-x3/project-05/lib/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # 导入文件 2 | file(GLOB LIB_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp") 3 | 4 | # 导入目录 5 | set (INCLUDE_HEADERS "${CMAKE_CURRENT_SOURCE_DIR}/include/") 6 | 7 | # 设置变量(导出到父级目录) 8 | set(LIB_SOURCES ${LIB_SOURCES} PARENT_SCOPE) 9 | set(INCLUDE_HEADERS ${INCLUDE_HEADERS} PARENT_SCOPE) -------------------------------------------------------------------------------- /src/file/ch04-x3/project-05/lib/include/test.hpp: -------------------------------------------------------------------------------- 1 | 2 | #pragma once 3 | 4 | int test1_func(void); -------------------------------------------------------------------------------- /src/file/ch04-x3/project-05/lib/test.cpp: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | #include "test.hpp" 4 | 5 | int test1_func(void) 6 | { 7 | std::cout << "test1_func" << std::endl; 8 | return 0; 9 | } -------------------------------------------------------------------------------- /src/file/ch04-x3/project-05/main.cpp: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | #include "test.hpp" 4 | 5 | extern int test1_func(); 6 | 7 | int main() 8 | { 9 | std::cout << "Hello, World!" << std::endl; 10 | 11 | test1_func(); 12 | return 0; 13 | } -------------------------------------------------------------------------------- /src/file/ch04-x3/project-06/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # 设置 CMake 最低版本要求 2 | cmake_minimum_required(VERSION 3.10) 3 | 4 | # 设置项目名称 5 | project(target) 6 | 7 | # 指定 C++ 标准 8 | set(CMAKE_CXX_STANDARD 11) 9 | set(CMAKE_CXX_STANDARD_REQUIRED True) 10 | set(CMAKE_C_STANDARD 99) 11 | set(CMAKE_C_STANDARD_REQUIRED True) 12 | 13 | # 添加可执行文件 14 | add_executable(target) 15 | 16 | # 添加源文件 17 | target_sources(target PRIVATE main.cpp test.c) 18 | 19 | # 添加编译选项 20 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Os") 21 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Os") 22 | -------------------------------------------------------------------------------- /src/file/ch04-x3/project-06/main.cpp: -------------------------------------------------------------------------------- 1 | 2 | #include "test.h" 3 | #include 4 | 5 | using namespace std; 6 | 7 | int main(void) 8 | { 9 | test(); 10 | 11 | cout << "Hello World!" << endl; 12 | return 0; 13 | } -------------------------------------------------------------------------------- /src/file/ch04-x3/project-06/test.c: -------------------------------------------------------------------------------- 1 | 2 | #include "test.h" 3 | #include 4 | 5 | int test(void) 6 | { 7 | printf("test!\n"); 8 | return 0; 9 | } -------------------------------------------------------------------------------- /src/file/ch04-x3/project-06/test.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef __TEST_H 3 | #define __TEST_H 4 | 5 | #ifdef __cplusplus 6 | extern "C" { 7 | #endif 8 | 9 | int test(void); 10 | 11 | #ifdef __cplusplus 12 | } 13 | #endif 14 | 15 | #endif -------------------------------------------------------------------------------- /src/file/ch04-x3/project-07/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # 设置 CMake 最低版本要求 2 | cmake_minimum_required(VERSION 3.10) 3 | 4 | # 设置项目名称 5 | project(target) 6 | 7 | # 设置交叉编译工具链 8 | set(CMAKE_SYSTEM_NAME Linux) 9 | set(CMAKE_SYSTEM_PROCESSOR arm) 10 | set(CMAKE_C_COMPILER arm-none-linux-gnueabihf-gcc) 11 | set(CMAKE_CXX_COMPILER arm-none-linux-gnueabihf-g++) 12 | 13 | # 指定 C++ 标准 14 | set(CMAKE_CXX_STANDARD 11) 15 | set(CMAKE_CXX_STANDARD_REQUIRED True) 16 | 17 | # 添加可执行文件 18 | add_executable(target main.cpp) 19 | -------------------------------------------------------------------------------- /src/file/ch04-x3/project-07/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | int main(void) 6 | { 7 | cout << "Hello World!" << endl; 8 | return 0; 9 | } -------------------------------------------------------------------------------- /src/file/ch04-x3/project-08/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # 设置 CMake 最低版本要求 2 | cmake_minimum_required(VERSION 3.10) 3 | 4 | # 设置项目名称 5 | project(file1) 6 | 7 | # 添加编译选项 8 | ## 指定 C++ 标准 9 | set(CMAKE_CXX_STANDARD 11) 10 | set(CMAKE_CXX_STANDARD_REQUIRED True) 11 | 12 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Os") 13 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Os") 14 | 15 | # 创建静态库 16 | add_library(file1 STATIC file1.cpp) 17 | 18 | # 如果有头文件,设置头文件搜索路径,方便其他项目引用 19 | if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/file.h") 20 | target_include_directories(file1 PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) 21 | endif() 22 | 23 | # 添加编译完成后执行命令 24 | add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD 25 | COMMAND cp -rv lib${PROJECT_NAME}.a ${CMAKE_CURRENT_SOURCE_DIR}/../project-10 26 | COMMAND cp -rv lib${PROJECT_NAME}.a ${CMAKE_CURRENT_SOURCE_DIR}/../project-11/library/lib 27 | ) 28 | -------------------------------------------------------------------------------- /src/file/ch04-x3/project-08/file1.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | void test_file1() 6 | { 7 | cout << "test_file1" << endl; 8 | } 9 | -------------------------------------------------------------------------------- /src/file/ch04-x3/project-09/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # 设置 CMake 最低版本要求 2 | cmake_minimum_required(VERSION 3.10) 3 | 4 | # 设置项目名称 5 | project(file2) 6 | 7 | # 设备交叉编译工具链 8 | set(CMAKE_SYSTEM_NAME Linux) 9 | 10 | # 指定 C++ 标准 11 | set(CMAKE_CXX_STANDARD 17) 12 | set(CMAKE_CXX_STANDARD_REQUIRED True) 13 | 14 | # 创建动态库 15 | add_library(file2 SHARED file2.cpp) 16 | 17 | # 如果有头文件,设置头文件搜索路径,方便其他项目引用 18 | if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/file.h") 19 | target_include_directories(file2 PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) 20 | endif() 21 | 22 | # 添加编译选项 23 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Os") 24 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Os") 25 | 26 | # 添加编译完成后执行命令 27 | add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD 28 | COMMAND cp -rv lib${PROJECT_NAME}.so ${CMAKE_CURRENT_SOURCE_DIR}/../project-10 29 | COMMAND cp -rv lib${PROJECT_NAME}.so ${CMAKE_CURRENT_SOURCE_DIR}/../project-11/library/lib 30 | ) 31 | -------------------------------------------------------------------------------- /src/file/ch04-x3/project-09/file2.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | void test_file2() 6 | { 7 | cout << "test2" << endl; 8 | } 9 | -------------------------------------------------------------------------------- /src/file/ch04-x3/project-10/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # 设置 CMake 最低版本要求 2 | cmake_minimum_required(VERSION 3.10) 3 | 4 | # 设置项目名称 5 | project(target) 6 | 7 | # 设备交叉编译工具链 8 | set(CMAKE_SYSTEM_NAME Linux) 9 | 10 | # 指定 C++ 标准 11 | set(CMAKE_CXX_STANDARD 17) 12 | set(CMAKE_CXX_STANDARD_REQUIRED True) 13 | 14 | # 添加可执行文件 15 | add_executable(target main.cpp) 16 | 17 | # 链接动态库目录 18 | target_link_directories(target PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) 19 | 20 | # 添加 libpthread 和 libm 21 | target_link_libraries(target PRIVATE pthread m) 22 | 23 | # 添加本地动静态库 24 | target_link_libraries(target PRIVATE file1 file2) 25 | 26 | # 添加宏定义 27 | target_compile_definitions(target PRIVATE DEBUG_MODE MAX_SIZE=100) 28 | 29 | # 添加编译选项 30 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Os") 31 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Os") 32 | 33 | # 添加自定义命令 34 | add_custom_command(TARGET ${PROJECT_NAME} PRE_BUILD 35 | COMMAND ${CMAKE_COMMAND} -E echo "Checking for required libraries..." 36 | COMMAND ${CMAKE_COMMAND} -E echo "Checking libfile1.a" 37 | COMMAND test -f "${CMAKE_CURRENT_SOURCE_DIR}/libfile1.a" || (echo "libfile1.so not found, please build project-08" && exit 1) 38 | WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 39 | COMMAND ${CMAKE_COMMAND} -E echo "Checking libfile2.so" 40 | COMMAND test -f "${CMAKE_CURRENT_SOURCE_DIR}/libfile2.so" || (echo "libfile2.so not found, please build project-09" && exit 1) 41 | WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 42 | ) -------------------------------------------------------------------------------- /src/file/ch04-x3/project-10/main.cpp: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | 4 | extern void test_file1(); 5 | extern void test_file2(); 6 | 7 | int main() 8 | { 9 | std::cout << "Hello World!\n"; 10 | 11 | test_file1(); 12 | 13 | test_file2(); 14 | return 0; 15 | } -------------------------------------------------------------------------------- /src/file/ch04-x3/project-11/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # 设置 CMake 最低版本要求 2 | cmake_minimum_required(VERSION 3.16) 3 | 4 | # 设置项目名称 5 | project(target) 6 | 7 | # 指定 C++ 标准 8 | set(CMAKE_CXX_STANDARD 17) 9 | set(CMAKE_CXX_STANDARD_REQUIRED True) 10 | 11 | # 设置查找库的目录(如果库不在标准目录下,需要指定路径) 12 | set(CMAKE_PREFIX_PATH "library") 13 | 14 | # 设置 CMake 模块路径 15 | set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake") 16 | 17 | # 查找 USER_FILES 库 18 | find_package(USER_FILES REQUIRED) 19 | 20 | if(USER_FILES_FOUND) 21 | message(STATUS "USER_FILES found: ${FILE_INCLUDE_DIR}, ${FILE_LIBRARIES}") 22 | 23 | add_executable(target main.cpp) 24 | 25 | target_include_directories(target PRIVATE ${FILE_INCLUDE_DIR}) 26 | 27 | target_link_libraries(target PRIVATE ${FILE_LIBRARIES}) 28 | else() 29 | message(FATAL_ERROR "USER_FILES not found.") 30 | endif() 31 | 32 | # 添加自定义命令 33 | add_custom_command(TARGET ${PROJECT_NAME} PRE_BUILD 34 | COMMAND ${CMAKE_COMMAND} -E echo "Checking for required libraries..." 35 | COMMAND ${CMAKE_COMMAND} -E echo "Checking libfile1.a" 36 | COMMAND test -f "${CMAKE_CURRENT_SOURCE_DIR}/library/lib/libfile1.a" || (echo "libfile1.so not found, please build project-08" && exit 1) 37 | WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 38 | COMMAND ${CMAKE_COMMAND} -E echo "Checking libfile2.so" 39 | COMMAND test -f "${CMAKE_CURRENT_SOURCE_DIR}/library/lib/libfile2.so" || (echo "libfile2.so not found, please build project-09" && exit 1) 40 | WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 41 | ) 42 | -------------------------------------------------------------------------------- /src/file/ch04-x3/project-11/cmake/FindUSER_FILES.cmake: -------------------------------------------------------------------------------- 1 | # 查找 files 头文件 2 | find_path(FILE_INCLUDE_DIR 3 | NAMES file.hpp 4 | PATHS /include 5 | PATH_SUFFIXES USER_FILES 6 | ) 7 | 8 | # 查找 files 库文件 9 | find_library(FILE1_LIBRARY 10 | NAMES file1 11 | PATHS /lib 12 | ) 13 | 14 | find_library(FILE2_LIBRARY 15 | NAMES file2 16 | PATHS /lib 17 | ) 18 | 19 | # 处理 QUIET 或 REQUIRED 等参数 20 | include(FindPackageHandleStandardArgs) 21 | find_package_handle_standard_args(USER_FILES 22 | REQUIRED_VARS FILE_INCLUDE_DIR FILE1_LIBRARY FILE2_LIBRARY 23 | ) 24 | 25 | # 设置导出变量 26 | if(USER_FILES_FOUND) 27 | set(FILE_INCLUDE_DIR ${FILE_INCLUDE_DIR}) 28 | set(FILE_LIBRARIES ${FILE1_LIBRARY} ${FILE2_LIBRARY}) 29 | endif() 30 | 31 | # 标记为高级变量,默认隐藏 32 | mark_as_advanced(FILE_INCLUDE_DIR FILE1_LIBRARY FILE1_LIBRARY) -------------------------------------------------------------------------------- /src/file/ch04-x3/project-11/library/include/file.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | void test_file1(); 4 | void test_file2(); -------------------------------------------------------------------------------- /src/file/ch04-x3/project-11/library/lib/temp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/file/ch04-x3/project-11/library/lib/temp -------------------------------------------------------------------------------- /src/file/ch04-x3/project-11/main.cpp: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | #include "file.hpp" 4 | 5 | int main() 6 | { 7 | std::cout << "Hello World!\n"; 8 | 9 | test_file1(); 10 | 11 | test_file2(); 12 | return 0; 13 | } -------------------------------------------------------------------------------- /src/file/ch04-x3/project-12/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # 设置 CMake 最低版本要求 2 | cmake_minimum_required(VERSION 3.16) 3 | 4 | # 设置项目名称 5 | project(target) 6 | 7 | set(CMAKE_SYSTEM_NAME Linux) 8 | set(CMAKE_SYSTEM_PROCESSOR arm) 9 | set(CMAKE_C_COMPILER arm-none-linux-gnueabihf-gcc) 10 | set(CMAKE_CXX_COMPILER arm-none-linux-gnueabihf-g++) 11 | 12 | # 设置查找库的目录(如果库不在标准目录下,需要指定路径) 13 | set(CMAKE_PREFIX_PATH "$ENV{SUPPORT_ENV_INSTALL}") 14 | 15 | # 设置 CMake 模块路径 16 | set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake") 17 | 18 | # 查找 Mosquitto 库 19 | find_package(Mosquitto REQUIRED) 20 | 21 | if(Mosquitto_FOUND) 22 | message(STATUS "Mosquitto found: ${Mosquitto_INCLUDE_DIRS}, ${Mosquitto_LIBRARIES}") 23 | 24 | add_executable(target main.cpp) 25 | 26 | target_include_directories(target PRIVATE ${Mosquitto_INCLUDE_DIRS} "${CMAKE_SOURCE_DIR}/include") 27 | 28 | target_link_libraries(target PRIVATE ${Mosquitto_LIBRARIES}) 29 | else() 30 | message(FATAL_ERROR "Mosquitto not found.") 31 | endif() -------------------------------------------------------------------------------- /src/file/ch04-x3/project-12/cmake/FindMosquitto.cmake: -------------------------------------------------------------------------------- 1 | # 查找 mosquitto 头文件 2 | find_path(Mosquitto_INCLUDE_DIR 3 | NAMES mosquitto.h mosquittopp.h 4 | PATHS /usr/include /usr/local/include /include 5 | PATH_SUFFIXES mosquitto 6 | ) 7 | 8 | # 查找 mosquitto 库文件 9 | find_library(Mosquitto_LIBRARY 10 | NAMES mosquitto 11 | PATHS /usr/lib /usr/local/lib 12 | ) 13 | 14 | # 查找 mosquittopp 库文件(C++ 客户端) 15 | find_library(Mosquittopp_LIBRARY 16 | NAMES mosquittopp 17 | PATHS /usr/lib /usr/local/lib 18 | ) 19 | 20 | find_library(OpenSSL_LIBRARY 21 | NAMES ssl 22 | PATHS /usr/lib /usr/local/lib 23 | ) 24 | 25 | find_library(Crypto_LIBRARY 26 | NAMES crypto 27 | PATHS /usr/lib /usr/local/lib 28 | ) 29 | 30 | # 处理 QUIET 或 REQUIRED 等参数 31 | include(FindPackageHandleStandardArgs) 32 | find_package_handle_standard_args(Mosquitto 33 | REQUIRED_VARS Mosquitto_INCLUDE_DIR Mosquitto_LIBRARY Mosquittopp_LIBRARY OpenSSL_LIBRARY Crypto_LIBRARY 34 | ) 35 | 36 | # 设置导出变量 37 | if(Mosquitto_FOUND) 38 | set(Mosquitto_INCLUDE_DIRS ${Mosquitto_INCLUDE_DIR}) 39 | set(Mosquitto_LIBRARIES ${Mosquitto_LIBRARY} ${Mosquittopp_LIBRARY} ${Crypto_LIBRARY} ${OpenSSL_LIBRARY}) 40 | endif() 41 | 42 | # 标记为高级变量,默认隐藏 43 | mark_as_advanced(Mosquitto_INCLUDE_DIR Mosquitto_LIBRARY Mosquittopp_LIBRARY OpenSSL_LIBRARY Crypto_LIBRARY) -------------------------------------------------------------------------------- /src/file/ch04-x3/project-12/main.cpp: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | #include "include/mosquittopp.h" 4 | 5 | class mqtt_device : public mosqpp::mosquittopp 6 | {}; 7 | 8 | int main(void) 9 | { 10 | mqtt_device my_mosq(); 11 | 12 | return 0; 13 | } -------------------------------------------------------------------------------- /src/file/ch04-x3/project-13/application/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # 设置 CMake 最低版本要求 2 | cmake_minimum_required(VERSION 3.10) 3 | 4 | # 设置项目名称 5 | project(app) 6 | 7 | # 设备交叉编译工具链 8 | set(CMAKE_SYSTEM_NAME Linux) 9 | 10 | # 指定 C 标准 11 | set(CMAKE_C_STANDARD 17) 12 | set(CMAKE_C_STANDARD_REQUIRED True) 13 | 14 | # 创建程序 15 | add_executable(${PROJECT_NAME} main.c) 16 | 17 | # 链接动态库 18 | target_link_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) 19 | 20 | target_link_libraries(${PROJECT_NAME} PRIVATE dynamic) 21 | 22 | # 添加编译选项 23 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Os") 24 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Os") 25 | -------------------------------------------------------------------------------- /src/file/ch04-x3/project-13/application/includes.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef __INCLUDES_H__ 3 | #define __INCLUDES_H__ 4 | 5 | #ifdef __cplusplus 6 | extern "C" { 7 | #endif 8 | 9 | int a_init(void); 10 | int a_show(void); 11 | void a_release(void); 12 | 13 | #ifdef __cplusplus 14 | } 15 | #endif 16 | 17 | #endif -------------------------------------------------------------------------------- /src/file/ch04-x3/project-13/application/main.c: -------------------------------------------------------------------------------- 1 | #include "includes.h" 2 | 3 | int main(int argc, char *argv[]) 4 | { 5 | a_init(); 6 | 7 | a_show(); 8 | 9 | a_release(); 10 | return 0; 11 | } -------------------------------------------------------------------------------- /src/file/ch04-x3/project-13/dynamic_library/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # 设置 CMake 最低版本要求 2 | cmake_minimum_required(VERSION 3.10) 3 | 4 | # 设置项目名称 5 | project(dynamic) 6 | 7 | # 设备交叉编译工具链 8 | set(CMAKE_SYSTEM_NAME Linux) 9 | 10 | # 指定 C++ 标准 11 | set(CMAKE_CXX_STANDARD 17) 12 | set(CMAKE_CXX_STANDARD_REQUIRED True) 13 | 14 | # 创建动态库 15 | add_library(dynamic SHARED mainso.cpp) 16 | 17 | # 添加编译选项 18 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Os") 19 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Os") 20 | 21 | # 添加编译完成后执行命令 22 | add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD 23 | COMMAND cp -rv *.so ${CMAKE_CURRENT_SOURCE_DIR}/../application 24 | COMMAND cp -rv ../*.h ${CMAKE_CURRENT_SOURCE_DIR}/../application 25 | ) -------------------------------------------------------------------------------- /src/file/ch04-x3/project-13/dynamic_library/includes.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef __INCLUDES_H__ 3 | #define __INCLUDES_H__ 4 | 5 | #ifdef __cplusplus 6 | extern "C" { 7 | #endif 8 | 9 | int a_init(void); 10 | int a_show(void); 11 | void a_release(void); 12 | 13 | #ifdef __cplusplus 14 | } 15 | #endif 16 | 17 | #endif -------------------------------------------------------------------------------- /src/file/ch04-x3/project-13/dynamic_library/mainso.cpp: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | #include "includes.h" 4 | 5 | class A { 6 | public: 7 | A() { 8 | std::cout << "A::A()" << std::endl; 9 | } 10 | ~A() { 11 | std::cout << "A::~A()" << std::endl; 12 | } 13 | void show() { 14 | std::cout << "A::show()" << std::endl; 15 | } 16 | }; 17 | 18 | static A *a = nullptr; 19 | 20 | int a_init(void) 21 | { 22 | a = new A(); 23 | 24 | return 0; 25 | } 26 | 27 | int a_show(void) 28 | { 29 | if (a != nullptr) { 30 | a->show(); 31 | } 32 | 33 | return 0; 34 | } 35 | 36 | void a_release(void) 37 | { 38 | if (a != nullptr) { 39 | delete a; 40 | a = nullptr; 41 | } 42 | } -------------------------------------------------------------------------------- /src/file/embed_linux_design.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/file/embed_linux_design.xlsx -------------------------------------------------------------------------------- /src/file/开发板功能整理.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/file/开发板功能整理.xlsx -------------------------------------------------------------------------------- /src/image/ch01-x1-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch01-x1-01.png -------------------------------------------------------------------------------- /src/image/ch01-xz-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch01-xz-01.png -------------------------------------------------------------------------------- /src/image/ch02-01-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-01-01.png -------------------------------------------------------------------------------- /src/image/ch02-01-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-01-02.png -------------------------------------------------------------------------------- /src/image/ch02-01-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-01-03.png -------------------------------------------------------------------------------- /src/image/ch02-01-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-01-04.png -------------------------------------------------------------------------------- /src/image/ch02-01-05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-01-05.png -------------------------------------------------------------------------------- /src/image/ch02-01-06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-01-06.png -------------------------------------------------------------------------------- /src/image/ch02-01-07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-01-07.png -------------------------------------------------------------------------------- /src/image/ch02-01-08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-01-08.png -------------------------------------------------------------------------------- /src/image/ch02-02-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-02-01.png -------------------------------------------------------------------------------- /src/image/ch02-02-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-02-02.png -------------------------------------------------------------------------------- /src/image/ch02-02-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-02-03.png -------------------------------------------------------------------------------- /src/image/ch02-02-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-02-04.png -------------------------------------------------------------------------------- /src/image/ch02-03-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-03-01.png -------------------------------------------------------------------------------- /src/image/ch02-04-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-04-01.png -------------------------------------------------------------------------------- /src/image/ch02-06-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-06-01.png -------------------------------------------------------------------------------- /src/image/ch02-06-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-06-02.png -------------------------------------------------------------------------------- /src/image/ch02-06-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-06-03.png -------------------------------------------------------------------------------- /src/image/ch02-06-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-06-04.png -------------------------------------------------------------------------------- /src/image/ch02-06-05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-06-05.png -------------------------------------------------------------------------------- /src/image/ch02-08-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-08-01.png -------------------------------------------------------------------------------- /src/image/ch02-09-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-09-01.png -------------------------------------------------------------------------------- /src/image/ch02-10-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-10-01.png -------------------------------------------------------------------------------- /src/image/ch02-10-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-10-02.png -------------------------------------------------------------------------------- /src/image/ch02-10-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-10-03.png -------------------------------------------------------------------------------- /src/image/ch02-10-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-10-04.png -------------------------------------------------------------------------------- /src/image/ch02-10-05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-10-05.png -------------------------------------------------------------------------------- /src/image/ch02-10-06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-10-06.png -------------------------------------------------------------------------------- /src/image/ch02-10-07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-10-07.png -------------------------------------------------------------------------------- /src/image/ch02-10-08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-10-08.png -------------------------------------------------------------------------------- /src/image/ch02-10-09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-10-09.png -------------------------------------------------------------------------------- /src/image/ch02-10-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-10-10.png -------------------------------------------------------------------------------- /src/image/ch02-11-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-11-01.png -------------------------------------------------------------------------------- /src/image/ch02-11-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-11-02.png -------------------------------------------------------------------------------- /src/image/ch02-14-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-14-01.png -------------------------------------------------------------------------------- /src/image/ch02-14-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-14-02.png -------------------------------------------------------------------------------- /src/image/ch02-17-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-17-01.png -------------------------------------------------------------------------------- /src/image/ch02-17-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-17-02.png -------------------------------------------------------------------------------- /src/image/ch02-17-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-17-03.png -------------------------------------------------------------------------------- /src/image/ch02-17-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-17-04.png -------------------------------------------------------------------------------- /src/image/ch02-x1-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-x1-01.png -------------------------------------------------------------------------------- /src/image/ch02-x1-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-x1-02.png -------------------------------------------------------------------------------- /src/image/ch02-x1-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-x1-03.png -------------------------------------------------------------------------------- /src/image/ch02-x1-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-x1-04.png -------------------------------------------------------------------------------- /src/image/ch02-x1-05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-x1-05.png -------------------------------------------------------------------------------- /src/image/ch02-x1-06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-x1-06.png -------------------------------------------------------------------------------- /src/image/ch02-x1-07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-x1-07.png -------------------------------------------------------------------------------- /src/image/ch02-x1-08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-x1-08.png -------------------------------------------------------------------------------- /src/image/ch02-x1-09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-x1-09.png -------------------------------------------------------------------------------- /src/image/ch02-x2-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-x2-01.png -------------------------------------------------------------------------------- /src/image/ch02-x5-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-x5-01.png -------------------------------------------------------------------------------- /src/image/ch02-x5-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-x5-02.png -------------------------------------------------------------------------------- /src/image/ch02-x5-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-x5-03.png -------------------------------------------------------------------------------- /src/image/ch02-x6-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-x6-01.png -------------------------------------------------------------------------------- /src/image/ch02-x6-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-x6-02.png -------------------------------------------------------------------------------- /src/image/ch02-x6-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-x6-03.png -------------------------------------------------------------------------------- /src/image/ch02-x6-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-x6-04.png -------------------------------------------------------------------------------- /src/image/ch02-x6-05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-x6-05.png -------------------------------------------------------------------------------- /src/image/ch02-xz-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch02-xz-01.png -------------------------------------------------------------------------------- /src/image/ch03-00-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-00-01.png -------------------------------------------------------------------------------- /src/image/ch03-00-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-00-02.png -------------------------------------------------------------------------------- /src/image/ch03-00-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-00-03.png -------------------------------------------------------------------------------- /src/image/ch03-00-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-00-04.png -------------------------------------------------------------------------------- /src/image/ch03-00-05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-00-05.png -------------------------------------------------------------------------------- /src/image/ch03-00-06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-00-06.png -------------------------------------------------------------------------------- /src/image/ch03-01-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-01-01.png -------------------------------------------------------------------------------- /src/image/ch03-01-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-01-02.png -------------------------------------------------------------------------------- /src/image/ch03-03-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-03-01.png -------------------------------------------------------------------------------- /src/image/ch03-03-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-03-02.png -------------------------------------------------------------------------------- /src/image/ch03-04-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-04-01.png -------------------------------------------------------------------------------- /src/image/ch03-04-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-04-02.png -------------------------------------------------------------------------------- /src/image/ch03-04-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-04-03.png -------------------------------------------------------------------------------- /src/image/ch03-05-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-05-01.png -------------------------------------------------------------------------------- /src/image/ch03-05-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-05-02.png -------------------------------------------------------------------------------- /src/image/ch03-05-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-05-03.png -------------------------------------------------------------------------------- /src/image/ch03-05-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-05-04.png -------------------------------------------------------------------------------- /src/image/ch03-05-05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-05-05.png -------------------------------------------------------------------------------- /src/image/ch03-05-06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-05-06.png -------------------------------------------------------------------------------- /src/image/ch03-05-07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-05-07.png -------------------------------------------------------------------------------- /src/image/ch03-06-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-06-01.png -------------------------------------------------------------------------------- /src/image/ch03-07-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-07-01.png -------------------------------------------------------------------------------- /src/image/ch03-07-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-07-02.png -------------------------------------------------------------------------------- /src/image/ch03-07-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-07-03.png -------------------------------------------------------------------------------- /src/image/ch03-07-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-07-04.png -------------------------------------------------------------------------------- /src/image/ch03-07-05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-07-05.png -------------------------------------------------------------------------------- /src/image/ch03-07-06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-07-06.jpg -------------------------------------------------------------------------------- /src/image/ch03-08-01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-08-01.jpg -------------------------------------------------------------------------------- /src/image/ch03-08-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-08-02.png -------------------------------------------------------------------------------- /src/image/ch03-08-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-08-03.png -------------------------------------------------------------------------------- /src/image/ch03-08-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-08-04.png -------------------------------------------------------------------------------- /src/image/ch03-08-05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-08-05.png -------------------------------------------------------------------------------- /src/image/ch03-08-06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-08-06.png -------------------------------------------------------------------------------- /src/image/ch03-08-07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-08-07.png -------------------------------------------------------------------------------- /src/image/ch03-09-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-09-01.png -------------------------------------------------------------------------------- /src/image/ch03-09-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-09-02.png -------------------------------------------------------------------------------- /src/image/ch03-09-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-09-03.png -------------------------------------------------------------------------------- /src/image/ch03-09-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-09-04.png -------------------------------------------------------------------------------- /src/image/ch03-10-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-10-01.png -------------------------------------------------------------------------------- /src/image/ch03-10-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-10-02.png -------------------------------------------------------------------------------- /src/image/ch03-10-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-10-03.png -------------------------------------------------------------------------------- /src/image/ch03-10-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-10-04.png -------------------------------------------------------------------------------- /src/image/ch03-10-05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-10-05.png -------------------------------------------------------------------------------- /src/image/ch03-10-06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-10-06.png -------------------------------------------------------------------------------- /src/image/ch03-10-07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-10-07.png -------------------------------------------------------------------------------- /src/image/ch03-11-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-11-01.png -------------------------------------------------------------------------------- /src/image/ch03-11-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-11-02.png -------------------------------------------------------------------------------- /src/image/ch03-12-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-12-01.png -------------------------------------------------------------------------------- /src/image/ch03-12-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-12-02.png -------------------------------------------------------------------------------- /src/image/ch03-13-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-13-01.png -------------------------------------------------------------------------------- /src/image/ch03-13-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-13-02.png -------------------------------------------------------------------------------- /src/image/ch03-13-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-13-03.png -------------------------------------------------------------------------------- /src/image/ch03-14-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-14-01.png -------------------------------------------------------------------------------- /src/image/ch03-14-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-14-02.png -------------------------------------------------------------------------------- /src/image/ch03-14-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-14-03.png -------------------------------------------------------------------------------- /src/image/ch03-14-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-14-04.png -------------------------------------------------------------------------------- /src/image/ch03-14-05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-14-05.png -------------------------------------------------------------------------------- /src/image/ch03-14-06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-14-06.png -------------------------------------------------------------------------------- /src/image/ch03-14-07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-14-07.png -------------------------------------------------------------------------------- /src/image/ch03-14-08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-14-08.png -------------------------------------------------------------------------------- /src/image/ch03-15-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-15-01.png -------------------------------------------------------------------------------- /src/image/ch03-15-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-15-02.png -------------------------------------------------------------------------------- /src/image/ch03-15-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-15-03.png -------------------------------------------------------------------------------- /src/image/ch03-15-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-15-04.png -------------------------------------------------------------------------------- /src/image/ch03-16-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-16-01.png -------------------------------------------------------------------------------- /src/image/ch03-16-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-16-02.png -------------------------------------------------------------------------------- /src/image/ch03-17-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-17-01.png -------------------------------------------------------------------------------- /src/image/ch03-17-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-17-02.png -------------------------------------------------------------------------------- /src/image/ch03-17-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-17-03.png -------------------------------------------------------------------------------- /src/image/ch03-19-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-19-01.png -------------------------------------------------------------------------------- /src/image/ch03-19-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-19-02.png -------------------------------------------------------------------------------- /src/image/ch03-19-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-19-03.png -------------------------------------------------------------------------------- /src/image/ch03-19-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-19-04.png -------------------------------------------------------------------------------- /src/image/ch03-21-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-21-01.png -------------------------------------------------------------------------------- /src/image/ch03-21-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-21-02.png -------------------------------------------------------------------------------- /src/image/ch03-22-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-22-01.png -------------------------------------------------------------------------------- /src/image/ch03-22-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-22-02.png -------------------------------------------------------------------------------- /src/image/ch03-22-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-22-03.png -------------------------------------------------------------------------------- /src/image/ch03-22-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-22-04.png -------------------------------------------------------------------------------- /src/image/ch03-22-05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-22-05.png -------------------------------------------------------------------------------- /src/image/ch03-22-06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-22-06.png -------------------------------------------------------------------------------- /src/image/ch03-22-07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-22-07.png -------------------------------------------------------------------------------- /src/image/ch03-22-08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-22-08.png -------------------------------------------------------------------------------- /src/image/ch03-22-09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-22-09.png -------------------------------------------------------------------------------- /src/image/ch03-22-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-22-10.png -------------------------------------------------------------------------------- /src/image/ch03-22-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-22-11.png -------------------------------------------------------------------------------- /src/image/ch03-22-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-22-12.png -------------------------------------------------------------------------------- /src/image/ch03-22-13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-22-13.png -------------------------------------------------------------------------------- /src/image/ch03-22-14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-22-14.png -------------------------------------------------------------------------------- /src/image/ch03-22-15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-22-15.png -------------------------------------------------------------------------------- /src/image/ch03-22-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-22-16.png -------------------------------------------------------------------------------- /src/image/ch03-32-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-32-01.png -------------------------------------------------------------------------------- /src/image/ch03-32-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-32-02.png -------------------------------------------------------------------------------- /src/image/ch03-32-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-32-03.png -------------------------------------------------------------------------------- /src/image/ch03-32-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-32-04.png -------------------------------------------------------------------------------- /src/image/ch03-32-05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-32-05.png -------------------------------------------------------------------------------- /src/image/ch03-32-06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-32-06.png -------------------------------------------------------------------------------- /src/image/ch03-x6-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-x6-01.png -------------------------------------------------------------------------------- /src/image/ch03-xz-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-xz-01.png -------------------------------------------------------------------------------- /src/image/ch03-xz-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-xz-02.png -------------------------------------------------------------------------------- /src/image/ch03-xz-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-xz-03.png -------------------------------------------------------------------------------- /src/image/ch03-xz-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch03-xz-04.png -------------------------------------------------------------------------------- /src/image/ch04-00-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch04-00-01.png -------------------------------------------------------------------------------- /src/image/ch04-00-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch04-00-02.png -------------------------------------------------------------------------------- /src/image/ch04-00-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch04-00-03.png -------------------------------------------------------------------------------- /src/image/ch04-00-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch04-00-04.png -------------------------------------------------------------------------------- /src/image/ch04-02-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch04-02-01.png -------------------------------------------------------------------------------- /src/image/ch04-02-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch04-02-02.png -------------------------------------------------------------------------------- /src/image/ch04-02-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch04-02-03.png -------------------------------------------------------------------------------- /src/image/ch04-02-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch04-02-04.png -------------------------------------------------------------------------------- /src/image/ch04-02-05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch04-02-05.png -------------------------------------------------------------------------------- /src/image/ch04-07-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch04-07-01.png -------------------------------------------------------------------------------- /src/image/ch04-08-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch04-08-01.png -------------------------------------------------------------------------------- /src/image/ch04-08-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch04-08-02.png -------------------------------------------------------------------------------- /src/image/ch04-08-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch04-08-03.png -------------------------------------------------------------------------------- /src/image/ch04-08-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch04-08-04.png -------------------------------------------------------------------------------- /src/image/ch04-08-05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch04-08-05.png -------------------------------------------------------------------------------- /src/image/ch04-12-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch04-12-01.png -------------------------------------------------------------------------------- /src/image/ch04-12-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch04-12-02.png -------------------------------------------------------------------------------- /src/image/ch04-12-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch04-12-03.png -------------------------------------------------------------------------------- /src/image/ch04-12-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch04-12-04.png -------------------------------------------------------------------------------- /src/image/ch04-12-05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch04-12-05.png -------------------------------------------------------------------------------- /src/image/ch04-13-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch04-13-01.png -------------------------------------------------------------------------------- /src/image/ch04-x3-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch04-x3-01.png -------------------------------------------------------------------------------- /src/image/ch04-x3-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch04-x3-02.png -------------------------------------------------------------------------------- /src/image/ch04-x3-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch04-x3-03.png -------------------------------------------------------------------------------- /src/image/ch04-x3-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch04-x3-04.png -------------------------------------------------------------------------------- /src/image/ch04-x3-05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch04-x3-05.png -------------------------------------------------------------------------------- /src/image/ch04-x3-06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch04-x3-06.png -------------------------------------------------------------------------------- /src/image/ch04-x3-07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch04-x3-07.png -------------------------------------------------------------------------------- /src/image/ch04-x3-08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch04-x3-08.png -------------------------------------------------------------------------------- /src/image/ch04-x3-09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch04-x3-09.png -------------------------------------------------------------------------------- /src/image/ch04-x3-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch04-x3-10.png -------------------------------------------------------------------------------- /src/image/ch04-x3-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch04-x3-11.png -------------------------------------------------------------------------------- /src/image/ch04-x3-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/ch04-x3-12.png -------------------------------------------------------------------------------- /src/image/mainFrame.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zc110747/build_embed_linux_system/767370b7a99dee42044f1220ae79c65a3679f4b5/src/image/mainFrame.png --------------------------------------------------------------------------------