暂时未有相关云产品技术能力~
ITGEGE在线教育嵌入式开发讲师。 CSDN博客专家、CSDN-Linux特邀编辑、CSDN博乐、CSDN学院讲师,目前从事嵌入式开发领域,从事与单片机,Linux,android相关的产品开发。
在源代码根目录下: system/core/init/init.c 找到 static void selinux_initialize(void) 函数将boot is_enforcing = selinux_is_enforcing();改成boot is disabled = selinux_is_disabled();security_setenforce(is_disabled); 重新编译即可。
在Android 5.0源代码根目录下: 找到system/extras/su/su.c下的main函数下的这段代码: 将其注释后重新编译即可。 //安卓系统权限修改2017-1-26 yangyx--->change /* Until we have something better, only root and the shell can use su.
关于系统调用,相信学习过操作系统的同学应该都不陌生。 那么,什么是系统调用? 百度的权威解释如下: 点击打开链接 由操作系统实现提供的所有系统调用所构成的集合即程序接口或应用编程接口(Application Programming Interface,API)。
一般情况下会出现CDC serial 和 ADB设备安装失败。这时候我们就要手动进行安装了 打开Window设备管理器 鼠标右键打开带?号的驱动程序--->选择驱动程序--->更新驱动程序--->浏览计算机以查找驱动程序软件--->从计算机的设备驱动程序列表中选择。
今天,我就来教大家写写最简单的Kconfig,什么是Kconfig? 我们配置过的信息最终会在这以下的两个文件中找到。 这个文件会被.c包含 include/generated/autoconf.
clang++: error: unable to execute command: Killedclang++: error: clang frontend command failed due to signal (use -v to see invocation)clang version 3.
通过查阅百度和谷歌,以下解决方法: The problem has been solved, because I installed the amd64.iso linux system,so first must excuse apt-get install lsb-core,then you can excuse arm-linux-gcc -v也就是64位系统需要安装lsb-core这个库才行。
git的安装很简单,只要一句命令就可以解决了。 (1)安装Git sudo apt-get install git (2)git的使用 1、获取仓库的全部源代码 git config --global user.
今天真是背。。。安装了一晚上的源都安装不成功,一直提示校验和有问题。 于是问了其他大神,很多人提供了方法,但都没什么用,后来用以下这种方法解决了问题,因为update不成功导致后面java jdk7安装不成功。
说到写第一个linux内核驱动程序,再简单不过了。以前也写过,这次将做一个图形化的整理。 我这里以我的开发环境tiny4412为主,我将在这上面写第一个驱动程序。 首先,我在driver/目录下创建yangyx目录, 在目录下新建一个hello.c和一个Makefile hello.c内容如下: hello.c包含的头文件就类似咱们写标准C一样的头文件。
在源码目录下: Ctag -R . 前提是已经安装了Ctag这个工具 然后会目录下生成索引文件。 如何搜索: ep: vim -t memcpy 回车 会出现索引,按esc两次,根据信息提示选择标号进入API 进到API后 : ctrl + ] 进入另一个api,返回 ctrl + ...
1、make bootimage 编译生成kernel.img和boot.img的整合 会在out目录下生成以下文件。Target ram disk: out/target/product/em_t8350_emmc/ramdisk.
#include #include //用指针的方式检测机器的大小端模式 int small_port() { int a = 1 ; char b = *((char *)(&a)) ; return b ; } int main(void) { int i = small_...
container_of宏在很久以前的文章我就已经有分析写过了,但是看回去,感觉以前自己对这个宏的表达描述分析能力还是有待提高,毕竟那时候刚接触linux内核不久,整个人都懵懵哒,无法说得让别人通俗易懂。
俗话说,不会写makefile的程序员不是好的程序员。 看了很多人写的makefile教程,感觉太难懂,还不如韦东山老师视频里讲的好理解。 先记下这几个符号,以后看到就不会忘记这是什么东西了。 先来看一个例子: Person: main.o person.o g++ -o $@ $^ %.o : %.cpp g++ -c -o $@ $< clean: rm -rf *.o Person其中: 1、Person表示要生成的目标文件。
原理: 虚拟一个TYPE类型的结构体变量,通过TYPE.MEMBER的方式来访问MEMBER成员,进而得到MEMBER成员相对于整个结构体首地址的偏移量。 作用:为接下来的container_of宏的讲解出现做铺垫 offsetof宏: #define offsetof(TYPE,MEMBER) ((int) &((TYPE *)0)->MEMBER) 接下来看看例程就明白了,其实这个宏挺简单的,&((TYPE *)0)->MEMBER其实相当于得到了成员的偏移减去0地址偏移,也就是结构体的首地址,进而就得到了该成员相当于整个结构体的偏移量。
#include //默认情况下,结构体一般在内存中的自动对齐格式是4个字节 //结构体设置手动对齐 //如果这里是4,那么下面的打印就是8 //如果这里是2,那么下面的打印就是6 //如果这里是1,那么下面的打印就是5 #pragma pack(4) struct mystu { char a ; int b ; }; #pragma pack() int main(void) { printf("str:%d\n",sizeof(struct mystu)); return 0 ; } 自动对齐不需要加#pragma pack这个宏。
生成补丁文件diff -Nurp 源文件或文件夹 新的文件或文件夹 > xxx.patch打补丁patch -p0 < xxx.patch 操作需要在当前目录下,先比较两个文件或文件夹的不同,再用patch将生成的xxx.patch打到目标文件或文件夹中。
测试可以采用 sdk 下的google开源工具 external/stressapptest也可以采用 开源的memtester。 (1)stressapptest 其是:Stressful Application Test (stressapptest) 的简称 Stressful Appl...
源代码如下: #include #include #include #include #include int get_buf_data(char *buf,char *data) { char *p1 =NULL,* p2=NULL; int num =0; p1 = ...
This caused a few problems the first time C++ was ported to a system where case wasn't significant in the filename, however, and different users adopted different solutions: .
更改源的方法:sudo vim /etc/apt/source.list # deb cdrom:[Ubuntu 16.04 LTS _Xenial Xerus_ - Release amd64 (20160420.
#include #include #include #include #include #include #include #include #define MAX_FILE_NUM 128 #define MAX_PATH_LEN 128 char file_path...
1、安装FTP软件源 sudo apt-get install vsftp 2、安装完毕FTP会自动为我们创建帐户,这时候设置密码就可以了 sudo passwd ftp 按提示输入即可 3、创建ftp用户的home目录,使用sudo mkdir /home/ftp命令 4、设置home目录权限chmod 777 /home/ftp 5、配置/etc/vsftpd.
最近在开机加一些自己的测试程序,编译的是eng版本,希望安卓开机后能够看到自己的调试信息,可是一开机就会有很多其它的信息干扰我的调试,那么如何屏蔽掉kernel的kmsg打印的这些信息呢? 很简单,我们找到以下这个文件: 在我的源码目录下:MT8127_M0_MP8_0407_BK\bootable\lk\app\mt_boot\mt_boot.
今天心血来潮,想把之前做的开发板环境配置以及编译的东西重新整理一下,毕竟最近在搞开发,所以有必要温故而知新。 以下是我整个Android-5.0的工程目录列表: 其中build_4412_img.sh、copyimage_to_window_system.sh是我自己写的快速编译拷贝脚本。
2015年12月1日,结束了4个月的尚观嵌入式培训生涯,经过了几轮重重面试,最终来到了伟易达集团。经过了长达3个月的试用期,正式成为了伟易达集团的助理工程师。 回顾一年来的学习,工作,生活。各种酸甜苦辣,庆幸是有一群支持我的同事小伙伴,他们同样来自尚观IT培训机构,4年前,他们也是一样,怀着自己的理想考上了理想的大学,4年后,怀着自己的理想通过4个月的培训晋升,巩固自己的知识体系,最终也是找到了一份满意的工作,来到了VTECH, 这一年,收获还是非常大的,获得了公司的升职,同时自己的CSDN博客也从默默无闻提升到了CSDN博客专家。
1、arm-none-eabi-g++:是编译ARM裸板用的编译器,不依赖于操作系统。 2、-Xlinker -T "../LF3Kmonitor.ld" -Xlinker -Map="Bogota_ICT_V.map"-ram-hosted.ld -mc 使用连接器:-Xlinker -rpath -Xlinker (-Xlinker -rpath=) 第二个-Xlinker作为参数时表示给连接器传参。
今天在写一个SPI-flash读写程序,目的是要将一个二进制文件写到SPI_FLASH中,最后通过开机读取,实际上这个.bin文件就是uboot和second-boot的结合体。通过SD卡写到SPI-FLASH中就可以脱离SD卡开机启动了。
今天在工作上搞了一天高通的芯片uboot程序,目的是希望将一个裸板的程序移植到uboot中,并且开机让它运行。这个芯片是NXP4330,目前是高通的一个芯片,基于ARM-contexA9架构,那么就跟4412是一样的架构了,今天将uboot加载流程基本上算是搞明白了,也明白了uboot最后是通过一些手段,最终能够去加载kernel.img,最终启动内核,后面就是加载文件系统了。
在ARM裸板驱动编程中,是不允许程序直接调用C库程序的。为什么呢?因为此时kernel还没有被加载,所以在封装在kernel层的C库的API是用不了的,那怎么办? 在开发过程中,printf的功能我不用再详细多说,就是用来debug调试程序的,有了printf,写代码出错的时候能够快速定位错误。
最近要开始搞新项目,基于arm的高通方案的项目。 那么,如何在ubuntu上搭建这个编译环境呢? 1、找到相关的安装包:http://download.csdn.net/download/storeage/7858739(我的在这里下的) 2、解压缩包到/home目录下,也可以放到其它地方,随你。
static inline int get_order(unsigned long size) { int order; size = (size-1) >> (PAGE_SHIFT-1); order = -1; do { size >>= 1; order++; } wh...
1.make -jX X表示数字,这个命令将编译Android系统并生成镜像,XX表示可以使用到的CPU核数,这在配置好的电脑上特别有用,公司的16核ubuntu服务器执行make -j16只要不到20分钟,而双核PC上需要4个小时! 2.make snod 这条命令将重新生成镜像,消耗的时间很少,类似WinCE的makeimg过程,如果你修改了一些数据文件(如音乐、视频)等文件时比较有用。
最近看到一个博客,他的博文虽然是转载的,但源作者肯定对底层的理解可谓是非常透彻,一副思维导图就可以将整个重要体系建立起来,非常适合大家学习。学习不单单只要有代码,生动有趣更重要。在此推荐一波: http://blog.csdn.net/yuzeze
首先来看一个简单的Android makefile,这个是我上篇文章写的,重新摘出来: LOCAL_PATH:=$(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := eng LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog LOCAL_SRC_FILES:= \ ppp.
Android 系统默认情况下,system 分区是只读 mount 的,因为无法进行往里写数据的,可以用 adb 命令 adb remount 重新 mount 一下。 也可以通过在板子上,输入以下命令重新mount一下system分区命令使其可读可写。
今天要写的这篇博文意义重大,也是网上很少有的,这是在我工作中学会的一项技术,当然,它也是由简单的问题组合而来的。如何在安卓中写C语言程序,调试安卓驱动,测试程序的的一项重要技能,下面我就不说废话了,直接说实用的,怎么用这个东西。
今天看linux内核驱动的代码,发现一个算法写得挺简单,也有意思。 分享一下我的测试代码: #include typedef int U32 ; U32 String2Dec( const char *pstr ) { char ch; U32 value; value = 0; ...
1、安装samba图形化配置界面 sudo apt-get install system-config-samba 2、启动图形化配置界面 3、添加用户,最好是要用adduser命令去添加 具体配置可参考以下博客: http://blog.
当我在终端敲下这条命令的时候,系统就提示telnetd:apt-get:Package has no installation sudo apt-get install xinetd telnetd刚开始我以为是没有这个包,后来查了一下资料发现,有这个软件,于是百度了一下才知道解决以上问题需要如下操作: # apt-get update # apt-get upgrade # apt-get install 这样就可以正常使用apt-get了。
之前写过一篇关于android5.0 init的介绍,这篇博客是介绍android6.0init,之前有的代码介绍不详细。而且分析 解析init.rc那块代码也没有结合init.rc介绍。 一、 main函数的一些准备工作 下面我们分析下源码: [cpp] view plain copy ...
最近在开发MTK的相关项目,需要将一些可执行文件添加到init.rc文件里去,但是开机后发现,这个bin文件没有权限不能执行,于是我就在init.rc中对相应的bin文件增加了权限。后来发现,改了也没有用,百度了一下,有人说这是跟SELINUX有关,于是通过init.
今天来介绍一个开发者常用的知识点, 函数指针数组。 这是个什么东西?初学者看到可能就会懵了,又是指针又是数组,还有函数?指针一个就够呛了,还搞这么多。不怕,容我慢慢道来。 首先,咱们先弄明白一个概念性的问题。
Author:伟易达集团软件工程师 II 杨源鑫Date :2016.11.11Subject:内存为什么是线性分布的 今天有位小伙伴问了我一个问题,问题大概是这样描述的: 师兄,我如何能够先访问一个函数,接着我访问另外一个函数,然后再访问原来的那个函数,但是不能调用原来那个函数,我该怎么实现呢?看完这问题,还真有点饶口啊,其实他想说明的关键就是:函数指针。
关于测试,知识点还是非常丰富的,最近收到了CSDN的书,参考了陈绍英老师写的《大型IT系统性能测试入门》这本书,写下了以下的见解,首先先来了解一下测试种类。 (1)压力测试: 对系统施加压力的测试,利用最大级别的的设置来进行的测试。
1、按照源码中sdk目录下的howto_build_SDK.txt参考文档的编译方式 $ cd ~/my-android-git $ . build/envsetup.sh $ lunch sdk-eng $ make sdk 结果,产生错误log信息如下:#### m...
最近在开始接触Android APP开发,有了一点java基础之后,安卓代码确实看起来就没有那么难了,可以跟着书上把例程敲一遍,然后熟能生巧可以应用起来,现在写了一个简单的APP,实现的是Edit编辑框输入帐号和密码,后台判断,如果正确则跳转到本CSDN博客网址,否则就通过Toast提示出错。
1、如何使用安卓中的按键Button? 1、先从控件库拖一个按钮button的控件,在XML设置好宽高等参数 对应的就是Button这个图标,直接拖出来即可; 以下是设置这个按钮对应的XML代码: 2、在onCreate中新建一个按钮并实例化: Button button = (Button)findViewById(R.
内部类是java中非常方便的一种机制,内部类所在的类称为宿主类,即内部类只能被它的宿主类使用,用这个特性,可以很好的控制类的可见性。 接下来看一个例子: package for_apro; import java.