当前位置: 首页 > news >正文

ajs17网站建设网站建设的作用是什么

ajs17网站建设,网站建设的作用是什么,装饰公司东莞网站建设,个人主页经典句子一、在openwrt系统架构#xff0c;编写helloworld的应用程序。 第一步先创建目录#xff0c;项目代码要放在 openwrt根目下的 package 目录中#xff0c;这里源码写在了 hellworld 的 src 目录下#xff0c;因为外层还有需要编写的文件。 mkdir -p ~/openwrt/package/hel…一、在openwrt系统架构编写helloworld的应用程序。 第一步先创建目录项目代码要放在 openwrt根目下的 package 目录中这里源码写在了 hellworld 的 src 目录下因为外层还有需要编写的文件。 mkdir -p ~/openwrt/package/hellworld/src cd  ~/openwrt/package/helloworld/src 然后编写 helloworld.c 和源码下的 Makefile 文件 touch helloworld.c Makefile nano helloworld.c nano Makefile helloworld.c 内容如下 #include stdio.hint main(){    printf(hello world!\n);    return 0;} Makefile 包含了两个编译过程一个清除的命令 helloworld : helloworld.o    $(CC) $(LDFLAGS) helloworld.o -o helloworldhelloworld.o : helloworld.c    $(CC) $(CFLAGS) -c helloworld.cclean :    rm *.o helloworld 写完上面的代码后可以简单测试一下输入 make 编译生成可执行文件用 ./ 运行就可以了使用 make clean 可以清除生成的可执行文件 make  make clean 编写配置文件 这里先进入上一层目录即 helloworld 目录并创建一个新的 Makefile 文件 $cd ~/openwrt/package/helloworld $touch Makefile 接下来编写这个 Makefile 文件内容如下 include $(TOPDIR)/rules.mk#定义相关信息PKG_NAME:helloworldPKG_RELEASE:1PKG_BUILD_DIR:$(BUILD_DIR)/$(PKG_NAME)include $(INCLUDE_DIR)/package.mkdefine Package/helloworld    SECTION:utils    CATEGORY:Utilities    TITLE:Helloworld -- prints a snarky messageendefdefine Package/helloworld/description    Its my first package demo.endefdefine Build/Prepare    echo Here is Package/Prepare    mkdir -p $(PKG_BUILD_DIR)    $(CP) ./src/* $(PKG_BUILD_DIR)/endefdefine Package/helloworld/install    echo Here is Package/install    $(INSTALL_DIR) $(1)/bin    $(INSTALL_BIN) $(PKG_BUILD_DIR)/helloworld $(1)/bin/endef$(eval $(call BuildPackage,helloworld)) 这里别人写的很清楚我就拿过来用了也可以参考官方文档。 第1行 include $(TOPDIR)/rules.mk 一般在Makefile的开头,包含了包的基本信息,比如Makefile中的 $(BUILD_DIR), $(INCLUDE_DIR), $(CP), $(INSTALL_DIR), $(INSTALL_BIN)都是这里定义的.具体内容可以到源码主目录下,查看 rules.mk文件. 3~5行,软件包的信息均以“PKG_”开头其意思和作用如下 PKG_NAME软件包名称将在menuconfig和ipkg可以看到。 PKG_VERSION软件版本号。 PKG_RELEASEMakefile的版本号 PKG_SOURCE源代码的文件名。 PKG_SOURCE_URL源代码的下载网站位置。 PKG_MD5SUM源代码文件的效验码。用于核对软件包是否下载正确。 PKG_CAT源代码文件的解压方法。包括zcat, bzcat, unzip等。 PKG_BUILD_DIR软件包编译目录。它的父目录为$(BUILD_DIR)。 第7行 include $(INCLUDE_DIR)/package.mk 一般在软件包的基本信息完成后再引入他定义了用户态软件包的规则。编译包分为用户态和内核模块用户态软件包使用Package内核模块使用KernelPackage. $(INCLUDE_DIR)/Kernel.mk文件对于软件包为内核时不可缺少 $(INCLUDE_DIR)/package.mk应用在用户态。接下来讲述用户态软件包。用户程序的编译包以 Package/开头然后接着软件名在Package定义中的软件名可以与软件包名不一样而且可以多个定义。 9~13行 定义包的名称为 helloworld SECTION : 包的类型为 utils CATEGORY : 目录为Utilitis,即文件在 menuconfig中的位置;有时还会有 SUBMENU项,即子目录. TITLE : 用于软件包的简短描述,将显示在 menuconfig中. URL 软件包的下载位置。 MAINTAINER 维护者选项。 DEPENDS 与其他软件的依赖。即如编译或安装需要其他软件时需要说明。如果存在多个依赖则每个依赖需用空格分开。依赖前使用号表示默认显示即对象沒有选中时也会显示使用则默认为不显示即当依赖对象选中后才显示。 15~17行 软件包的详细描述,将显示在 make menuconfig中 19~23行 编译准备方法对于网上下载的软件包不需要再描述。对于非网上下载或自行开发的软件包必须说明编译准备方法。本文所用的准备方法就是首先创建软件包目录然后将源码拷贝到刚刚创建的目录中。按OpenWrt的习惯一般把自己设计的程序全部放在src目录下。 25~29行 软件包的安装方法包括一系列拷贝编译好的文件到指定位置。调用时会带一个参数就是嵌入系统的镜像文件系统目录因此$(1)表示嵌入系统的镜像目录。 INSTALL_DIR:install -d -m0755 : 创建所属用戶可读写、执行其他用戶可读可执行的目录 INSTALL_BIN:install -m0755 : 编译好的文件到镜像文件目录 31行 $(eval $(call BuildPackage,helloworld)) 完成前面定义后必须使用eval函数实现各种定义。其格式为 对于一般软件包 $(eval ( c a l l P a c k a g e , (call Package,(callPackage,(PKG_NAME))) 或对于内核模块 $(eval ( c a l l K e r n e l P a c k a g e , (call KernelPackage,(callKernelPackage,(PKG_NAME))) 如果一个软件包有多个程序例如一个应用程序有自己的内核模块上面使用的 PKG_NAME需要灵活变通。 eval函数可能设计多个。也可以当成多个软件包处理。 编译软件 这里要回到 openwrt 的主目录编译软件 cd ~/openwrt 在 menu 中选中我们添加的软件 make menuconfig 还记得我们写的配置文件吗?我们定义了软件目录。 define Package/helloworld     SECTION:utils     CATEGORY:Utilities     TITLE:Helloworld -- prints a snarky message endef 在 openwrt 菜单首页的 Utilities中找到 helloworld使用空格键勾选上保存退出。 接下来在 openwrt 的根目录下单独编译我们的软件 make package/helloworld/compile Vs 应该可以在 openwrt\bin\ramips\ 下的某个目录找到也可以用下面命令 find bin/ -name helloworld*.ipk 软件安装 具体如何使用 SFTP 传文件可以看我上一篇博客下面讲讲安装软件下面是一些命令 opkg install xxx.ipk opkg update #更新可以获取的软件包列表 opkg upgrade #对已经安装的软件包升级 opkg list #获取软件列表 opkg install #安装指定的软件包 opkg remove #卸载已经安装的指定的软件包 运行软件 在 openwrt 板子上输入 helloworld并按下回车应该就会输出我们代码里输出的内容 helloworld hello world! 二、在openwrt系统架构编写helloworld驱动程序。 1、OpenWRT中的驱动    Openwrt源码中所有扩展的软件包都在package目录下自己添加的应用放在该目录下。    所有扩展的内核驱动都在package/kernel目录下自己添加的驱动放在该目录下。 2、添加驱动步骤 在package/kernel目录下添加一个helloworld文件夹 在helloworld添加一个Makefile文件。具体Makefile怎么写我们先看两个kernel中自带的驱动的Makefile文件。 I2C驱动 ## Copyright (C) 2008 OpenWrt.org## This is free software, licensed under the GNU General Public License v2.# See /LICENSE for more information.#   I2C驱动 #包含上两级目录配置include $(TOPDIR)/rules.mk          # TOPDIR : /openwrtinclude $(INCLUDE_DIR)/kernel.mk    # INCLUDE_DIR: /openwrt/include PKG_NAME:i2c-gpio-custom           #驱动名字PKG_RELEASE:2                      #Makefile的版本号 include $(INCLUDE_DIR)/package.mk   #包含上一级目录配置 # make menuconfig时在配置界面上显示的方式define KernelPackage/i2c-gpio-custom  SUBMENU:I2C support                 #显示的子选项  TITLE:Custom GPIO-based I2C device  #显示的内容  DEPENDS:GPIO_SUPPORT kmod-i2c-core kmod-i2c-gpio  #依赖于其他模块  FILES:$(PKG_BUILD_DIR)/i2c-gpio-custom.ko    #生成的目标文件  KCONFIG:endef define KernelPackage/i2c-gpio-custom/description Kernel module for register a custom i2c-gpio platform device. #帮助时显示的内容endef EXTRA_KCONFIG: \    CONFIG_I2C_GPIO_CUSTOMm    #编译成模块 # 无需更改EXTRA_CFLAGS: \    $(patsubst CONFIG_%, -DCONFIG_%1, $(patsubst %m,%,$(filter %m,$(EXTRA_KCONFIG)))) \    $(patsubst CONFIG_%, -DCONFIG_%1, $(patsubst %y,%,$(filter %y,$(EXTRA_KCONFIG)))) \ # 无需更改MAKE_OPTS: \    ARCH$(LINUX_KARCH) \            #CPU架构     CROSS_COMPILE$(TARGET_CROSS) \  #交叉编译工具    SUBDIRS$(PKG_BUILD_DIR) \    EXTRA_CFLAGS$(EXTRA_CFLAGS) \    $(EXTRA_KCONFIG) #编译前的准备define Build/Prepare    mkdir -p $(PKG_BUILD_DIR)    $(CP) ./src/* $(PKG_BUILD_DIR)/  #PKG_BUILD_DIR:编译时的目录对应于驱动就是 build_dir/target-**/linux-**/endef #编译define Build/Compile    $(MAKE) -C $(LINUX_DIR) \        $(MAKE_OPTS) \        modulesendef #完成前面定义后必须使用 eval 函数实现各种定义, KernelPackage代表是内核驱动模块Package表示应用程序$(eval $(call KernelPackage,i2c-gpio-custom)) RTC驱动 ## Copyright (C) 2006-2009 OpenWrt.org## This is free software, licensed under the GNU General Public License v2.# See /LICENSE for more information.#   RTC驱动 include $(TOPDIR)/rules.mkinclude $(INCLUDE_DIR)/kernel.mk PKG_NAME:rtc-rv5c386aPKG_RELEASE:1 include $(INCLUDE_DIR)/package.mk define KernelPackage/rtc-rv5c386a  SUBMENU:Other modules  DEPENDS:TARGET_brcm47xx  TITLE:Driver for RTC RV5C386A (used in WL-700gE and WL-HDD)  AUTOLOAD:$(call AutoLoad,70,rtc)  FILES:$(PKG_BUILD_DIR)/rtc.koendef define Build/Prepare    mkdir -p $(PKG_BUILD_DIR)    $(CP) ./src/* $(PKG_BUILD_DIR)/endef #有时候CROSS_COMPILE、ARCH、SUBDIRS、EXTRA_CFLAGS会被独立成一个变量然后再去引用define Build/Compile    $(MAKE) -C $(LINUX_DIR) \        CROSS_COMPILE$(TARGET_CROSS) \        ARCH$(LINUX_KARCH) \        SUBDIRS$(PKG_BUILD_DIR) \        EXTRA_CFLAGS$(BUILDFLAGS) \        modulesendef $(eval $(call KernelPackage,rtc-rv5c386a)) 根据上面的注释和解释并对比两份Makefile,我们发现写的基本结构都是相似的所以我们可以根据上面的模板来自行写一份。 以I2C为模板 ## Copyright (C) 2008 OpenWrt.org## This is free software, licensed under the GNU General Public License v2.# See /LICENSE for more information.# include $(TOPDIR)/rules.mkinclude $(INCLUDE_DIR)/kernel.mk PKG_NAME:helloworldPKG_RELEASE:2 include $(INCLUDE_DIR)/package.mk define KernelPackage/helloworld  SUBMENU:Other modules  TITLE:HelloWorld  FILES:$(PKG_BUILD_DIR)/helloworld.ko  KCONFIG:endef define KernelPackage/helloworld/description Kernel module for register helloworld.endef EXTRA_KCONFIG: \    CONFIG_HELLOWORLDm EXTRA_CFLAGS: \    $(patsubst CONFIG_%, -DCONFIG_%1, $(patsubst %m,%,$(filter %m,$(EXTRA_KCONFIG)))) \    $(patsubst CONFIG_%, -DCONFIG_%1, $(patsubst %y,%,$(filter %y,$(EXTRA_KCONFIG)))) \ MAKE_OPTS: \    ARCH$(LINUX_KARCH) \    CROSS_COMPILE$(TARGET_CROSS) \    SUBDIRS$(PKG_BUILD_DIR) \    EXTRA_CFLAGS$(EXTRA_CFLAGS) \    $(EXTRA_KCONFIG) define Build/Prepare    mkdir -p $(PKG_BUILD_DIR)    $(CP) ./src/* $(PKG_BUILD_DIR)/endef define Build/Compile    $(MAKE) -C $(LINUX_DIR) \        $(MAKE_OPTS) \        modulesendef $(eval $(call KernelPackage,helloworld)) 基本上就是I2C改成helloworld就OK了 3、在helloworld文件夹下再新建一个src文件夹在src下新建一个Kconfig文件。文件内容 # 该文件是make menuconfig显示界面会读取的文件config HELLOWORLD    tristate HelloWorld driver    default n    help      This is an HelloWorld Driver! 再新建一个Makefile文件内容为 obj-${CONFIG_HELLOWORLD}     helloworld.o 最后新建一个helloworld.c的驱动文件内容为 #include linux/module.h#include linux/kernel.h //insmod会执行该函数static int __init helloworld_init(void){    printk(helloworld driver init !\n);    return 0;}//rmmod会执行该函数static int __exit helloworld_exit(void){    printk(helloworld driver exit !\n);    return 0;} //声明出入口函数module_init(helloworld_init);module_exit(helloworld_exit);MODULE_AUTHOR(YANG);MODULE_LICENSE(GPL); 4、接下来就是编译了 先make menuconfig将驱动配置一下。 保存后执行 make package/kernel/helloworld/compile V99 编译出来的驱动模块在openwrt/bin/ramips/packages/kernel/kmod-helloworld_4.4.7-2_ramips_24kec.ipk 5、拷贝ipk安装包并运行 运行lsmod命令可以查看当前模块 lsmod 运行后重启板子或者vsftpd服务即可传输文件其实直接用也行要是不行就做这一步传输完ipk安装包后进入到ipk安装包所在目录使用opkg安装 ./bin/ar71xx/packages/base/kmod-helloworld_4.4.60-2_ar71xx.ipk opkg install kmod-helloworld_4.4.60-2_ar71xx.ipk 然后分别运行以下两条命令安装和: insmod helloworld.ko lsmod 运行dmesg命令查看内核缓冲区即可看到打印内容 dmesg 卸载模块 rmmod helloworld.ko 顺便提一下如果想要卸载刚才装的ipk安装包的软件运行以下命令 opkg list_installed 查看安装软件的列表然后运行opkg remove xxxxxxxx为列表里的名字原来ipk安装包的名字是无效的噢。
http://www.dnsts.com.cn/news/233167.html

相关文章:

  • 上海网站开发开发好的公司电话移动商城官网 积分兑换
  • 利用店铺网站做灰色优化中国十大广告公司
  • 网站开发的五个阶段移动应用开发网站
  • 娱乐网站怎么制作开发网页多少钱
  • 牧和邻宠物网站建设网站建设代管推广
  • 包头怎样做网站哈尔滨网站域名归那里管
  • 建设地方美食网站的目的注册资金多少有什么区别
  • 做全网vip电影网站违法吗国际贸易进出口
  • 合肥教育平台网站建设wordpress 4.8 php版本
  • 附近哪里有建筑模板卖上海哪学网站建设优化
  • 本溪网站设计公司庐江魅力网做网站号码
  • 网站加速器怎么开佳木斯做网站
  • 建站之星快速建站价格my eclipse网站开发
  • 玉树营销网站建设多少钱网站建设最贵多少钱
  • wordpress站做app微信商城收费吗
  • wordpress上传文件按标题谈谈你对seo概念的理解
  • 用什么做网站 优化电商网站开发价格
  • 重庆网站建设 渝潍坊模板建站定制
  • 做原创的网站网站优化排名易下拉霸屏
  • 温州网站建设科技有限公司免费开网店app
  • 专做彩票的网站石家庄市住房建设局网站
  • 八年级信息技术网站建立怎么做常州网站建设报价
  • iis的网站默认端口wordpress网站变慢
  • 无锡网站建设网站织梦网站导航如何删除
  • 技校网站建设与维护课程教学总结网站怎么做支付宝支付接口
  • 贵阳网站建设价格网络工程属于计算机类吗
  • 网站网站注册手机端网站模板
  • 视频网站的建设费用湖北省建设厅网站如何申诉
  • 万链网站做的怎么样?效果好的网站建设公司
  • 网站建设沙漠风用户体验设计师证书