<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # buildroot 根文件系統 [buildroot](https://buildroot.org/ )可用于構建小型的linux根文件系統。 大小最小可低至2M,與內核一起可以放入最小8M的spi flash中。 buildroot中可以方便地加入第三方軟件包(其實已經內置了很多),省去了手工交叉編譯的煩惱。 美中不足的是不支持包管理系統,沒有gcc等。 ## 下載安裝: 首先安裝一些依賴,比如linux頭文件: `apt-get install linux-headers-$(uname -r)` 然后下載安裝: ~~~ wget https://buildroot.org/downloads/buildroot-2017.08.tar.gz tar xvf buildroot-2017.08.tar.gz cd buildroot-2017.08/ make menuconfig ~~~ ## 配置 ### Target options ![](https://box.kancloud.cn/72d0ff769ed734d5f6ae677ce154e63a_388x116.png) 注意此處eabi, bsp中為eabi,主線為eabihf(同時選擇VFP) ### Toolchain ![](https://box.kancloud.cn/dd1147398cedbb4a07fbe97b7d94c003_644x202.png) ### System configuration ![](https://box.kancloud.cn/55ef14778a7ed4844f72465d20b895ba_458x274.png) ### Filesystem images ![](https://box.kancloud.cn/82f494cf73bffd67a1bc903220d2958e_501x227.png) 首先配置工具鏈,因為之前開發uboot和內核都用到了自己下載的工具鏈,所以這里也配置成外部工具鏈。 在本機上外部工具鏈配置為:/opt/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/ 工具鏈前綴是:arm-linux-gnueabihf 外部工具鏈gcc版本:我們使用的是最新的6.3版本 外部工具鏈內核頭文件:是在arm-linux-gnueabi/libc/usr/include/linux/version.h里讀取內核版本信息。本機的版本是4.6. (bsp為3.0.4) C庫還是選擇傳統的glibc。需要小體積可以選uclibc(需要自行編譯安裝)。 再在system 設置下主機名,root密碼等。 另外是串口號,波特率等 最后就是配置自己需要的軟件包,在menuconfig中選中即可。 有時候下載速度慢,可以復制下載鏈接,使用迅雷等下載好后,拷貝到dl目錄下,會自動識別。 ## 編譯 make > 有時候構建會出現莫名其妙的錯誤,make clean下會ok? 編譯完成后,會生成 output/images/rootfs.tar,此即所需的根文件系統 默認失能串口登錄,需要修改/etc/inittab: ttyS0::respawn:/sbin/getty -L ttyS0 115200 vt100 # GENERIC_SERIAL ## 刪除軟件包 buildroot在menuconfig里去掉軟件包后,并不會在打包的鏡像里去掉。 需要手動在output/target/usr/bin/里移除 make xxx-clean 清理 output/build/xxx, 包含 ## 重新編譯軟件包 刪除這個目錄下的.stamp_built和.stamp_target_installed.然后回到buildroot根目錄下make。buildroot會自動重新編譯對應軟件包并且拷貝到文件系統。 有些軟件包,比如QT,只刪除標記并不能達到完全重新編譯的效果,需要手工刪除編譯目錄來重新編譯。 ## 加入軟件包 1. 在package/Config.in 中對應位置添加 source "package/<pkg>/Config.in" 2. package/<pkg>下添加 Config.in, 使用kconfig編寫,描述該軟件包的狀態(Y/N/M) <pkg>.mk 使用make編寫,描述該軟件包獲取源的方法,編譯、安裝的方法等 可選的<pkt>.hash 檢查下載文件的完整性 可選的.patch文件 在編譯前給源代碼打補丁 Config.in寫法 config BR2_PACKAGE_<PKG> bool "pkg name" depends on BR2_PACKAGE_XXX select BR2_PACKAGE_XXX help pkg help content ### 網絡下載的軟件包 一般軟件包寫法 需要指定軟件包的基本信息(版本、下載地址等),依賴關系, 根據不同類型目標來設置<pkg>_INSTALL_xxx=YES or NO ~~~ 應用軟件包 TARGET_DIR 無需修改 共享庫文件 TARGET_DIR 和 STAGING_DIR 靜態庫 STAGING_DIR 安裝入bootloader或kernel BINARIES_DIR ~~~ 定義一般軟件包generic-package的動作 ~~~ <pkg>_CONFIGURE_CMDS, 配置命令, 總是調用 <pkg>_BUILD_CMDS, 編譯命令,總是調用 <pkg>_INSTALL_TARGET_CMDS, //如上節所示調用 <pkg>_INSTALL_STAGING_CMDS, <pkg>_INSTALL_IMAGES_CMDS, <pkg>_INSTALL_CMDS, 主機軟件包總是調用 <pkg>_CLEAN_CMDS //清理命令 <pkg>_UNINSTALL_TARGET_CMDS <pkg>_UNINSTALL_STAGING_CMDS ~~~ 常用軟件包信息 ~~~ LIBFOO_VERSION 版本號,如LIBFOO_VERSION = 0.1.2 LIBFOO_SOURCE 軟件包tar的名字,默認是packagename-$(LIBFOO_VERSION).tar.gz. 如LIBFOO_SOURCE = foobar-$(LIBFOO_VERSION).tar.bz2 LIBFOO_PATCH 補丁名 LIBFOO_SITE 軟件包源地址 缺省為http://$$(BR2_SOURCEFORGE_MIRROR).dl.sourceforge.net/sourceforge/packagename. LIBFOO_SITE=http://www.libfoosoftware.org/libfoo LIBFOO_SITE=http://svn.xiph.org/trunk/Tremor/ LIBFOO_SITE_METHOD 獲取軟件包的方法 wget, svn, git, bzr, 不指定的話會從URL猜測方法。 LIBFOO_DEPENDENCIES 列出軟件包的依賴 $(@D) 軟件包的源代碼解壓目錄 $(MAKE) 調用make $(MAKE1) 不能使用并行編譯時候的make $(TARGET_MAKE_ENV) $(HOST_MAKE_ENV), 傳給make的環境變量 $(TARGET_CC), $(TARGET_LD) CC,LD的選項. $(TARGET_CROSS) 教程編譯工具鏈的前綴 $(TARGET_DIR), $(STAGING_DIR), $(BINARIES_DIR), $(HOST_DIR). 常用HOOK (用+=添加) LIBFOO_POST_PATCH_HOOKS LIBFOO_PRE_CONFIGURE_HOOKS LIBFOO_POST_CONFIGURE_HOOKS LIBFOO_POST_BUILD_HOOKS LIBFOO_POST_INSTALL_HOOKS (for host packages only) LIBFOO_POST_INSTALL_STAGING_HOOKS (for target packages only) LIBFOO_POST_INSTALL_TARGET_HOOKS (for target packages only) ~~~ 例程 ~~~ ############################################################# # libfoo download from website ############################################################# LIBFOO_VERSION = 1.0 LIBFOO_SOURCE = libfoo-$(LIBFOO_VERSION).tar.gz LIBFOO_SITE = http://www.foosoftware.org/download #LIBFOO_INSTALL_STAGING = YES # default NO LIBFOO_DEPENDENCIES = host-libaaa libbbb define LIBFOO_BUILD_CMDS # $(@D) is pkg source folder $(MAKE) CC=$(TARGET_CC) LD=$(TARGET_LD) -C $(@D) all endef #condition statement #ifneq ($(BR2_PACKAGE_LIBFOO_TEST),y) # LIBFOO_CONF_OPT += --enable-test #endif #define LIBFOO_INSTALL_STAGING_CMDS # $(INSTALL) -D -m 0755 $(@D)/libfoo.a $(STAGING_DIR)/usr/lib/libfoo.a # $(INSTALL) -D -m 0644 $(@D)/foo.h $(STAGING_DIR)/usr/include/foo.h # $(INSTALL) -D -m 0755 $(@D)/libfoo.so* $(STAGING_DIR)/usr/lib #endef define LIBFOO_INSTALL_TARGET_CMDS $(INSTALL) -D -m 0755 $(@D)/libfoo.so* $(TARGET_DIR)/usr/lib $(INSTALL) -d -m 0755 $(TARGET_DIR)/etc/foo.d endef define LIBFOO_CLEAN_CMDS -$(MAKE) -C $(@D) clean endef $(eval $(call GENTARGETS,package,libfoo)) # gen pkt, must the last line ~~~ GENTARGETS需要三個參數 1. 軟件包目錄前綴,一般是package,如果更深就是package/xxx 2. 小寫的包名,比如libfoo, .mk里的變量前綴就是LIBFOO_, Config.in文件里的配置選項就是 BR2_PACKAGE_LIBFOO. 3. 可選,缺省是target,標識為host則為主機包 ### autotools-based軟件包的mk寫法 ~~~ ############################################################# # libfoo ############################################################# LIBFOO_VERSION = 1.0 LIBFOO_SOURCE = libfoo-$(LIBFOO_VERSION).tar.gz LIBFOO_SITE = http://www.foosoftware.org/download LIBFOO_INSTALL_STAGING = YES LIBFOO_INSTALL_TARGET = YES LIBFOO_CONF_OPT = --enable-shared LIBFOO_DEPENDENCIES = libglib2 host-pkg-config $(eval $(call AUTOTARGETS,package,libfoo)) ~~~ ### CMake-based軟件包mk寫法 ~~~ ############################################################# # libfoo ############################################################# LIBFOO_VERSION = 1.0 LIBFOO_SOURCE = libfoo-$(LIBFOO_VERSION).tar.gz LIBFOO_SITE = http://www.foosoftware.org/download LIBFOO_INSTALL_STAGING = YES LIBFOO_INSTALL_TARGET = YES LIBFOO_CONF_OPT = -DBUILD_DEMOS=ON LIBFOO_DEPENDENCIES = libglib2 host-pkg-config $(eval $(call CMAKETARGETS,package,libfoo)) ~~~ ### <pkg>.mk寫法之本地軟件包 常用變量 ~~~ LIBFOO_VERSION LIBFOO_SOURCE LIBFOO_SITE LIBFOO_DIR 軟件包被配置和編譯的目錄,一般建在BUILD_DIR下 LIBFOO_BINARY 軟件包二進制文件名 LIBFOO_TARGET_BINARY 軟件包的目標文件系統的安裝目錄 ~~~ 本地軟件包的.mk更像正常的makefile,當做普通makefile看即可 ~~~ ############################################################## # libfoo ############################################################# LIBFOO_DIR:=$(BUILD_DIR)/libfoo #這里 填獲取源代碼的方式,即本地拷貝文件 $(LIBFOO_DIR)/.source : mkdir -pv $(LIBFOO_DIR) $(LIBFOO_HOST_DIR) cp -rf package/libfoo/src/* $(LIBFOO_DIR) touch $@ #create dummy file #這里填配置編譯的操作 $(LIBFOO_DIR)/.configured: $(LIBFOO_DIR)/.source touch $@ #compile libfoo-binary: $(LIBFOO_DIR)/.configured mkdir -pv $(HOST_DIR)/usr/bin $(MAKE) BUILD_DIR=$(BUILD_DIR) CC="$(TARGET_CC)" -C $(LIBFOO_DIR) #install libfoo: libfoo-binary $(MAKE) DESTDIR="$(TARGET_DIR)" -C $(LIBFOO_DIR) install ############################################################## # Add our target ############################################################# ifeq ($(BR2_PACKAGE_LIBFOO),y) TARGETS += libfoo endif 然后在src里加入對應的 源文件和makefile,示例如下 ########################################### #Makefile for simple programs ########################################### INC= LDLIBS += -lpthread CFLAGS += -Wall #CPPFLAGS += PRG=threadpooltest OBJ=CThreadManage.o CThreadPool.o CThread.o CWorkerThread.o threadpooltest.o $(PRG):$(OBJ) $(CC) $(INC) $(LIB) -o $@ $(OBJ) .SUFFIXES: .c .o .cpp .cpp.o: $(CC) $(CFLAGS ) $(INC) -c $*.cpp -o $*.o .PRONY:clean clean: @echo "Removing linked and compiled files......" rm -f $(OBJ) $(PRG) SRCS := xxx.c CFLAGS := -Wall libfoo : $(SRCS) $(CC) $(filter %.c, $(SRCS)) $(CFLAGS) -o fsck_msdos clean: rm libfoo install: cp fsck_msdos $(DESTDIR)/usr/bin/ ~~~ //這個是manual makefile,也類似 ~~~ ############################################################# # libfoo ############################################################# LIBFOO_VERSION:=1.0 LIBFOO_SOURCE:=libfoo-$(LIBFOO_VERSION).tar.gz LIBFOO_SITE:=http://www.foosoftware.org/downloads LIBFOO_DIR:=$(BUILD_DIR)/foo-$(FOO_VERSION) LIBFOO_BINARY:=foo LIBFOO_TARGET_BINARY:=usr/bin/foo #method to get source $(DL_DIR)/$(LIBFOO_SOURCE): $(call DOWNLOAD,$(LIBFOO_SITE),$(LIBFOO_SOURCE)) #target: .source extract source tar $(LIBFOO_DIR)/.source: $(DL_DIR)/$(LIBFOO_SOURCE) $(ZCAT) $(DL_DIR)/$(LIBFOO_SOURCE) | tar -C $(BUILD_DIR) $(TAR_OPTIONS) - touch $@ #target:.configured $(LIBFOO_DIR)/.configured: $(LIBFOO_DIR)/.source (cd $(LIBFOO_DIR); rm -rf config.cache; \ $(TARGET_CONFIGURE_OPTS) \ $(TARGET_CONFIGURE_ARGS) \ ./configure \ --target=$(GNU_TARGET_NAME) \ --host=$(GNU_TARGET_NAME) \ --build=$(GNU_HOST_NAME) \ --prefix=/usr \ --sysconfdir=/etc \ ) touch $@ #target: binary file compile $(LIBFOO_DIR)/$(LIBFOO_BINARY): $(LIBFOO_DIR)/.configured $(MAKE) CC=$(TARGET_CC) -C $(LIBFOO_DIR) #target: target binary file move to target,strip,remove manual $(TARGET_DIR)/$(LIBFOO_TARGET_BINARY): $(LIBFOO_DIR)/$(LIBFOO_BINARY) $(MAKE) DESTDIR=$(TARGET_DIR) -C $(LIBFOO_DIR) install-strip rm -Rf $(TARGET_DIR)/usr/man #dependencies libfoo: uclibc ncurses $(TARGET_DIR)/$(LIBFOO_TARGET_BINARY) #download before compile libfoo-source: $(DL_DIR)/$(LIBFOO_SOURCE) libfoo-clean: $(MAKE) prefix=$(TARGET_DIR)/usr -C $(LIBFOO_DIR) uninstall -$(MAKE) -C $(LIBFOO_DIR) clean libfoo-dirclean: rm -rf $(LIBFOO_DIR) ############################################################# # Toplevel Makefile options ############################################################# ifeq ($(BR2_PACKAGE_LIBFOO),y) TARGETS+=libfoo endif ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看