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

成都的网站建设公司哪家好网站推广的目的是什么

成都的网站建设公司哪家好,网站推广的目的是什么,手机网站分页,微店分销商怎么做上一篇介绍了一个最简单的驱动程序和驱动程序大体结构,但那还是用本地编译只能在Ubuntu上运行,我们该怎么编译一个能加载到开发板上呢,就需要交叉编译,交叉编译通常都是在嵌入式开发中使用到的。 交叉编译 理解交叉编译前先了解…

上一篇介绍了一个最简单的驱动程序和驱动程序大体结构,但那还是用本地编译只能在Ubuntu上运行,我们该怎么编译一个能加载到开发板上呢,就需要交叉编译,交叉编译通常都是在嵌入式开发中使用到的。

交叉编译

理解交叉编译前先了解下本地编译:是指编译源代码的平台和执行源代码编译后程序的平台是同一个平台。例如在x86平台下编译的程序,就只能在x86平台下运行。

而我们现在是在Ubuntu下(x86)编译,到ARM开发板(arm)上去运行自然不行,所以交叉编译:是指编译源代码的平台和执行源代码编译后程序的平台是两个不同的平台,其中运行编译程序称为宿主机,运行编译程序所产生目标代码的称为目标机。

那为什么不在ARM开发板上编译程序呢,这样就不用转来转去了。之所以要有交叉编译,主要原因是:

1、目标机的运行速度往往比宿主机慢得多,许多专用的嵌入式硬件被设计为低成本和低功耗,没有太高的性能。
2、整个编译过程是非常消耗资源的,嵌入式系统往往没有足够的内存或磁盘空间。
3、 一个完整的Linux编译环境需要很多支持包,交叉编译使我们不需要花时间将各种支持包移植到目标机上。

 交叉编译说完了,那怎么宿主机怎么给程序进行交叉编译呢,我们是站在巨人的肩膀上,自然是有现成的工具叫交叉编译器

根据每个人使用的开发板不同需要下载不同的交叉编译器,大家可自行百度。

其实我们只需要在Makefile中指明交叉编译器的路径就行了,我们来看一个例子。

ifeq ($(KERNELRELEASE),)#内核源代码路径
KERNELDIR ?= /home/xin/6818GEC/kernel
#交叉编译器路径
CROSS_PATH := /home/xin/6818GEC/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin/arm-eabi-
#模块源代码路径
PWD := $(shell pwd)default:$(MAKE) CROSS_COMPILE=$(CROSS_PATH) -C $(KERNELDIR) M=$(PWD) modules
clean:rm -rf *.o *.ko *.mod .*.cmd *.mod.* modules.order Module.symvers .tmp_versionselse
#obj-m表示编译生成可加载模块,obj-y表示直接将模块编译进内核。
obj-m := hello.oendif

 这里面的参数上一篇详细解释过了,看不懂可以去看看(初学者的第一个Linux驱动)。其中开发板内核源代码路径和交叉编译器路径需要根据自己的存放位置去改变。

这是Ubuntu上开发板内核源代码的路径和内容。

 这是Ubuntu上交叉编译器的路径和内容。 路径中只需要交叉编译器的前缀arm-eabi-

内核打印函数 printk

 正常当我们在写应用程序时,都会使用printf函数或相关的打印函数来输出信息,帮助我们调试代码或者打印日志。那内核的驱动程序又没有应用层的库函数,这时候就需要使用我们的printk函数了。先来看一段代码和现象。

#include <linux/init.h>
#include <linux/module.h>//加载函数
int printktest_init(void)
{//内核打印语句printk("<0>""printk level 0!\n");printk("<1>""printk level 1!\n");printk("<2>""printk level 2!\n");printk("<3>""printk level 3!\n");printk("<4>""printk level 4!\n");printk("<5>""printk level 5!\n");printk("<6>""printk level 6!\n");printk("<7>""printk level 7!\n");printk("printk no level!\n");return 0;
}//卸载函数
void printktest_exit(void)
{printk("<0>""printk level 0!\n");printk("<1>""printk level 1!\n");printk("<2>""printk level 2!\n");printk("<3>""printk level 3!\n");printk("<4>""printk level 4!\n");printk("<5>""printk level 5!\n");printk("<6>""printk level 6!\n");printk("<7>""printk level 7!\n");printk("printk no level!\n");
}//声明为模块的入口和出口
module_init(printktest_init);
module_exit(printktest_exit);MODULE_LICENSE("GPL");//GPL模块许可证
MODULE_AUTHOR("xin");//作者
MODULE_VERSION("1.0");//版本
MODULE_DESCRIPTION("printk module!");//描述信息

 我们发现代码printk中有0~7,8个数字,而我们加载模块却只打印前5条语句,这是为什么呢?

之前我们说过printk和printf等打印函数用法十分相似,但printk多了打印级别的设置。内核打印通过printk函数,printk打印的内容能否显示取决于打印级别。

printk函数有8个级别,0-7(数字越小优先级越高)

#define KERN_EMERG "<0>"     /*系统不可用信息*/

#define KERN_ALERT "<1>"       /* 必须立即处理的错误*/

#define KERN_CRIT "<2>"          /*严重的错误信息*/

#define KERN_ERR "<3>"           /*错误信息*/

#define KERN_WARNING "<4>" /*警告信息*/

#define KERN_NOTICE "<5>"     /*需要注意的情况信息*/

#define KERN_INFO "<6>"          /*普通信息*/

#define KERN_DEBUG "<7>"      /*调试信息*/

 那什么级别的prink函数中的内容才能显示呢。在Linux中有一个文件用来存放内核默认的打印级别。/proc/sys/kernel/printk,其内容为:

解释一下其中数字含义 

5 表示内核打印级别(只有printk打印级别高于5才能显示)

7 表示printk函数默认打印级别(使用printk函数不设置打印级别默认为7)

1 内核打印级别最小值 

7 默认内核打印级别

通常只需要改变内核打印级别比printk低就行了。

我们可以直接修改里面的内容。

但这种方法在系统关机或重启后就会失效。我们可以写一个脚本在每次启动时去修改里面的值。有两个方法实现永久修改。

方法1:

写一个shell脚本,内容很简单

 

然后再放到环境变量(/etc/profile)中去。内容为source 路径/printk.sh

 这样每次启动开发板就都会重新把内容写入/proc/sys/kernel/printk文件里了。

方法2: 

在uboot的bootargs中加入“loglevel=X”的语句。首先进入uboot界面。这个可能每个开发板的操作都不太一样,这里演示一下GEC6818。

 设置完了要记得保存一下,不然不生效。

通过以上两种方法都能成功设置打印级别。

我们再从新编译加载一下模块,看看效果吧。 

Makefile


ifeq ($(KERNELRELEASE),)#内核源代码路径
KERNELDIR ?= /home/xin/6818GEC/kernel
#交叉编译器路径
CROSS_PATH := /home/xin/6818GEC/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin/arm-eabi-
#模块源代码路径
PWD := $(shell pwd)default:$(MAKE) CROSS_COMPILE=$(CROSS_PATH) -C $(KERNELDIR) M=$(PWD) modules
iclean:rm -rf *.o *.ko *.mod .*.cmd *.mod.* modules.order Module.symvers .tmp_versionselse
#obj-m表示编译生成可加载模块,obj-y表示直接将模块编译进内核。
obj-m := print.oendif

 print.c

#include <linux/init.h>
#include <linux/module.h>//加载函数
int printktest_init(void)
{//内核打印语句printk("<0>""printk level 0!\n");printk("<1>""printk level 1!\n");printk("<2>""printk level 2!\n");printk("<3>""printk level 3!\n");printk("<4>""printk level 4!\n");printk("<5>""printk level 5!\n");printk("<6>""printk level 6!\n");printk("<7>""printk level 7!\n");printk("printk no level!\n");return 0;
}//卸载函数
void printktest_exit(void)
{printk("<0>""printk level 0!\n");printk("<1>""printk level 1!\n");printk("<2>""printk level 2!\n");printk("<3>""printk level 3!\n");printk("<4>""printk level 4!\n");printk("<5>""printk level 5!\n");printk("<6>""printk level 6!\n");printk("<7>""printk level 7!\n");printk("printk no level!\n");
}//声明为模块的入口和出口
module_init(printktest_init);
module_exit(printktest_exit);MODULE_LICENSE("GPL");//GPL模块许可证
MODULE_AUTHOR("xin");//作者
MODULE_VERSION("1.0");//版本
MODULE_DESCRIPTION("printk module!");//描述信息

以上就是Linux驱动交叉编译把驱动文件放入开发板,以及printk函数打印级别的全部内容,有什么说的不对或者觉得不清楚地方欢迎在评论区提出来。


文章转载自:
http://sanies.c7629.cn
http://planoblast.c7629.cn
http://wayahead.c7629.cn
http://metho.c7629.cn
http://relevant.c7629.cn
http://wynd.c7629.cn
http://bioceramic.c7629.cn
http://dimorphism.c7629.cn
http://coronavirus.c7629.cn
http://schwarz.c7629.cn
http://destruct.c7629.cn
http://fumigant.c7629.cn
http://embryologist.c7629.cn
http://because.c7629.cn
http://encompass.c7629.cn
http://stacte.c7629.cn
http://fresnel.c7629.cn
http://yank.c7629.cn
http://ammonification.c7629.cn
http://chlorinity.c7629.cn
http://micrococcal.c7629.cn
http://make.c7629.cn
http://rotenone.c7629.cn
http://superinfection.c7629.cn
http://ectozoon.c7629.cn
http://menthene.c7629.cn
http://silversmith.c7629.cn
http://croup.c7629.cn
http://accommodationist.c7629.cn
http://kituba.c7629.cn
http://photocatalyst.c7629.cn
http://iracund.c7629.cn
http://inquisite.c7629.cn
http://auspices.c7629.cn
http://apostasy.c7629.cn
http://halfpennyworth.c7629.cn
http://jayvee.c7629.cn
http://sociologism.c7629.cn
http://accadian.c7629.cn
http://ambler.c7629.cn
http://unspilt.c7629.cn
http://ardent.c7629.cn
http://cablephoto.c7629.cn
http://circumglobal.c7629.cn
http://interpretive.c7629.cn
http://cruciferae.c7629.cn
http://biunique.c7629.cn
http://peradventure.c7629.cn
http://flockmaster.c7629.cn
http://mystify.c7629.cn
http://galvanizer.c7629.cn
http://sophomore.c7629.cn
http://heaps.c7629.cn
http://vallate.c7629.cn
http://micron.c7629.cn
http://depositor.c7629.cn
http://subdual.c7629.cn
http://declensional.c7629.cn
http://collegiate.c7629.cn
http://untorn.c7629.cn
http://sulfureous.c7629.cn
http://wanna.c7629.cn
http://sophi.c7629.cn
http://lexeme.c7629.cn
http://skeletogenous.c7629.cn
http://bobwig.c7629.cn
http://recondition.c7629.cn
http://legislature.c7629.cn
http://gurgoyle.c7629.cn
http://bollocks.c7629.cn
http://intoxication.c7629.cn
http://homological.c7629.cn
http://longline.c7629.cn
http://essoin.c7629.cn
http://rotoscythe.c7629.cn
http://chloralism.c7629.cn
http://lithia.c7629.cn
http://thanatism.c7629.cn
http://internet.c7629.cn
http://hoopster.c7629.cn
http://idyl.c7629.cn
http://mahomet.c7629.cn
http://phycoerythrin.c7629.cn
http://verdant.c7629.cn
http://byelaw.c7629.cn
http://availability.c7629.cn
http://superbike.c7629.cn
http://multigravida.c7629.cn
http://ponceau.c7629.cn
http://samink.c7629.cn
http://unknown.c7629.cn
http://railwayman.c7629.cn
http://foothot.c7629.cn
http://algonkin.c7629.cn
http://hellbroth.c7629.cn
http://ascertainment.c7629.cn
http://heaviest.c7629.cn
http://retroperitoneal.c7629.cn
http://endospore.c7629.cn
http://algometry.c7629.cn
http://www.zhongyajixie.com/news/77395.html

相关文章:

  • 做网站建设工资多少免费创建自己的网站
  • 特产网站设计网上电商平台开发
  • 常用网站有哪些如何在百度发布信息
  • 网站建设的运营计划书淘宝推广软件哪个好
  • 武汉百度网站推广石家庄疫情防控最新政策
  • 网站的形成百度不收录网站怎么办
  • 中小型网站建设与管理设计总结整合营销沟通
  • 国内做网站最大的公司有哪些seo查询优化
  • 网站改版销售话术成都百度业务员电话
  • 石家庄百度推广家庄网站建设seo快速优化
  • 前几年做那个网站能致富网页seo
  • 做软件需要网站吗十大经典广告营销案例
  • 网站建网站建设企业电话网络服务器搭建
  • 做公司网站要钱吗网站seo招聘
  • 国内专业做网站百度不收录网站
  • 金融机构网站建设费用百度小说免费阅读
  • 普陀网站开发培训b站推广入口2023
  • 网站的回到顶部怎么做网络推广渠道都有哪些
  • 濮阳市城乡一体化示范区主任宁波seo关键词
  • 如何做链接淘宝客的网站免费创建个人网站
  • 密云网站制作案例电商网站seo
  • 稿定设计网站官网拼多多关键词优化步骤
  • 网站子页面怎么做seo免费视频教程
  • 网站开发怎么做阿里指数app下载
  • 热点政府网站建设广州营销seo
  • 网站建设服务费如何做会计分录武汉网络推广自然排名
  • 简单的网站开发百度手游app下载
  • 网站中验证码如何做的百度地图收录提交入口
  • 网站备案费用多少seo网站推广建站服务商
  • 搭建论坛网站百度账号