Friday, 7 April 2017

Know your Competition

Patanjali has worked well to counter its competition, both brand and product-wise. A job seeker too should be able to assess the standing of other candidates and be prepared accordingly. For example, in a bank job interview you should be well aware that from M.Com graduate to CA pass out, everyone could apply for the job. Hence you should be prepared accordingly.

Job Searching Tips After Colleges


Job searching tips after colleges - After finishing studies every student think about his career, job and future opportunities. Many types of questions arise in his mind. The biggest question is what kind of job he or she should join, in order to achieve a good professional career. Due to competition in the market, searching job is not an easy task.

Many people lost their positions during the "Great Recession," others have found interesting and rewarding jobs. There is no magic formula for finding a job, but there are many ways to get a good job according to your taste. Here we are providing some useful tips for searching jobs of your interest.


1.Online Job Sites: There are many websites for searching jobs. Create your account on them, update your profile, upload your resume and search for job opportunities in your area. Then apply for the jobs that you like.

2 .Local Searches: If you want to find a job in a local area then Newspapers, Placement Offices and Job Consultants can help you. Consultants might charge 30 to 60 percent of your first salary but they can find better job according to your profile.

3. Networking: With the help of your social network, you can search for a good job. Consulting your friends, teachers, relatives, family friends and your parents can help you to get a job in their respective fields. Its most beneficial as it costs you nothing but a word of mouth.

4. Preparing for a Job Interview: Once you have cleared the first step, either its merit based on your academic records or your written test, you will be asked to appear in an interview. It is the most critical part of the selection process. Before appearing in an interview, just try to get some knowledge about that organisation and the technical knowledge to get that job. You can use the online search or the offline content that you have got, to attain the desired knowledge.

5. First impression last impression: The first time you meet your employer, especially the interviewer, you should make your first impression count. Try to be confident, answer to the point and look into the eyes of the interviewer while answering any question. Don’t show any confusion. If you don’t know any answer just tell it to the interviewer but don’t through guesses.

6. Be positive: Your thoughts should always be positive. Stay confident. If asked about a perceived negative, do not make excuses. Always believe in result. If you follow these tips, you must be get a good job.

Sunday, 4 December 2016

Linux Kernel Compilation Steps

Linux Kernel Compilation Steps

The Linux kernel is the heart of your Linux system. It handles user/your input/output, hardware, and controlling the power in the computer.

1.Download the latest version of the Linux kernel from http://www.kernel.org.

 Extract downloaded kernel.
 Change directory to where linux kernel has been extracted.

2. #sudo make menuconfig

3. Get Latest updates
   #sudo apt-get update

4. #sudo apt-get install yum

5. #sudo apt-get install ncurses -dev

6. #sudo make menuconfig

7. then enter the file systems menu
   make some changes as per your requirement.

8. #sudo make dep

9.  #sudo make bzImage

10. #sudo make modules

11. #sudo make modules_install

12. #sudo make install

13. #cd /boot

14. #ls
                   see there are following 4 files:
                                 a. system.map
                                 b. config
                                 c. vmlinuz
                                 d. initrd

15. #sudo update-initramfs -c -k <your Stable Kernel Number>

16. #sudo update-grub

17. Reboot the System
    #sudo reboot

Remove Ads from skype

The following steps will help to remove Ads from your skype The following steps will help to remove Ads from your skype:

Step1:
From Control Panel, Click on Internet Options, Click on the Security tab and select the Restricted Sites icon.
Press the Sites button and type apps.skype.com in the text box, then press Add.

Step 2:
Remove the Ad Placeholder
go to the path C:\Users\Your Username\AppData\Roaming\Skype.
Note:- AppData is a hidden folder. So you need to give the above path in explorer
You’ll then need to open the folder that’s titled with your Skype ID and find an XML file called config. Right-click that file and choose to open it with Notepad.
Press Ctrl + F to use the Find function to search for AdvertPlaceholder. You should find a piece of code that reads <AdvertPlaceholder>1</AdvertPlaceholder> — change that 1 to a 0 and you will remove the placeholder from your Skype interface.

Restart Skype for the changes to take effect
Software tools provided by Qualcomm

Software tools provided by Qualcomm

Worldwide more than one billion Android devices powered by Qualcomm Snapdragon processors.As Qualcomm Snapdragon processor powered these many Android device. Qualcomm also provide Software solution for developers.

At Qualcomm Developer Network, Qualcomm provide a full set of hardware and software tools that help developers to build high-performance apps and unlock the potential of devices powered by Snapdragon. Qualcomm software tools include SDKs (Software Development kits), profilers, debuggers and code compilers, which let developer to get the best power and performance out of the latest devices and also integrate cutting-edge features in their apps. By using these software tools developer can Create, test and optimize their latest apps and games by taking advantage of the unmatched performance and advanced features of next-generation Snapdragon processors.

At Qualcomm Developer Network following Software tools provided by Qualcomm

Compilers :
1. Snapdragon LLVM Compiler :
LLVM is a C/C++ compiler that is becoming increasingly popular. It enables use of compilers in a broader range of configurations, providing for better performance and power usage – particularly on Snapdragon micro-architectures. Beginning with the Jellybean MR1 release, Google has included LLVM as an alternative compiler as part of the Android toolchain and the Android NDK. LLVM is suitable wherever you use native code (C/C++) in your Android application.

SDK :
1. Adreno GPU SDK
Adreno GPU SDK help developer to developing and optimizing OpenGL ES applications for Android on platforms containing Qualcomm Adreno GPUs.

2. AllJoyn Proximal Connectivity Platform
AllJoyn is a collaborative open source project of the AllSeen Alliance. AllJoyn makes it easier to capitalize and create new and immersive experiences by enabling apps to connect, control and share resources with other nearby apps and connected smart things. You can be confident that this open, secure and universal framework and core set of services enables interoperability among nearby devices, products and applications across platforms and operating systems, so you can focus on your ideas and business.

3. AllPlay Click Wireless Home Audio SDK
The Qualcomm® AllPlay™ Click SDK, a product of Qualcomm Connected Experiences, Inc., is a collection of API documentation, sample source code and binary library to help developers create mobile apps that connect devices to make cross-brand media streaming a reality. It packs advanced audio capability into an easy to integrate, simple library. This allows developers and creators of Internet radio and music services to easily offer their users leading-edge use cases that work consistently across compatible devices, brands and platforms.

4. FastCV Computer Vision SDK
FastCV is designed for efficiency on all ARM-based processors, but is tuned to take advantage of Qualcomm's Snapdragon processor (S2 and above). This gives you the most widely used, computationally intensive vision processing APIs, with hardware acceleration and better performance on mobile devices.

FastCV will enable you to add new user experiences into your camera-based apps like:
1. gesture recognition
2. face detection, tracking and recognition
3. text recognition and tracking
4. augmented reality

5. Hexagon DSP SDK
The Hexagon SDK provides for a complete environment to generate dynamic Hexagon DSP code modules that can execute on the included simulator or on Snapdragon 800 based hardware development platforms.

6. LTE Broadcast SDK
The Qualcomm LTE Broadcast SDK gives developers the power to bring LTE Broadcast connectivity and content to their apps. This resource includes the APIs, tools, and documentation to develop and test LTE Broadcast applications for Android-based mobile devices with LTE broadcast service capabilities. The SDK defines the application interface to the Qualcomm LTE Broadcast middleware to make it easier to integrate services such as streaming video and file delivery into an app.

7. Snapdragon Math Libraries
If you are an app developer or an algorithm developer dealing with low level math routines, you know that squeezing the peak performance out of any processor is difficult and time consuming. And it’s even worse, when you have to start from scratch to support the newer generation processor. To address this portability across generations and to give you superior performance while maintaining the numerical correctness for your mathematical routines, Qualcomm is providing developers with Snapdragon Math Libraries.


8. Snapdragon SDK for Android
The Snapdragon SDK for Android is designed to make it easy to integrate facial processing and facial recognition features into your application.

Facial processing provide following features :
1. Blink Detection – measure how open each eye is
2. Gaze Tracking – assess where the subject is looking
3. Smile Value – estimate the degree of the smile
4. Face Orientation – track the Yaw, Pitch and Roll of the head

Go beyond face detection and perform real-time face analysis to identify people. You can use these Snapdragon SDK for Android capabilities to develop apps that can add users to an internal database through face registration and then identify users based on facial analysis. These features do not use any cloud-based recognition and are done entirely offline.

9. Symphony System Manager SDK
Symphony SDK is designed to solve this very problem by providing you with a set of APIs to put tighter control on how you want to utilize the various compute units within Qualcomm® Snapdragon™ processors like multi-core CPUs, GPU and DSPs for task scheduling, heterogeneous offload, and power and thermal management.

10. Snapdragon VR SDK
Coming Soon
Advanced heterogeneous processors like the Qualcomm® Snapdragon™ 820 processor are capable of delivering immersive VR experiences. The new Snapdragon VR SDK is designed to abstract the complexity of immersive virtual reality and provide developers with access to optimized, advanced VR features, to simplify development and to help them attain improved VR performance and power efficiency with the Snapdragon 820 for Android smartphones and upcoming VR headsets. The SDK is expected to be available in the second quarter of 2016.

11. Qualcomm’s Zeroth SDK
Coming Soon
Using Qualcomm’s Zeroth SDK developer can run deep learning programs directly on devices like smartphones and drones — if they’re powered by one of Qualcomm’s chips

Debuggers :
1. Snapdragon Debugger for Eclipse
Qualcomm® Snapdragon™ Debugger for Eclipse is a plug-in to the popular Eclipse IDE which enables debugging of a variety of APIs for Android devices.

Snapdragon Debugger for Eclipse Feature:

1. Android project creation, build, and deploy to device
2. Breakpoints, conditional breakpoints, memory breakpoints
3. Single step through native and assembly code
4. Views for registers, memory, local variables, and global variables
5. Multi-threaded applications
6. Loading tombstone/logcat crash logs
7. OpenCL data types
8. OpenCL Kernel debugging on CPU as well as GPU on Snapdragon devices

2. Snapdragon Debugger for Visual Studio
Qualcomm® Snapdragon Debugger for Visual Studio is a plug-in tool to Microsoft’s Visual Studio IDE that enables a variety of APIs for debugging devices powered by Snapdragon processors. With support for Android NDK application debugging in its first release, it simplifies debugging of native C/C++ code on Android devices.

Snapdragon Debugger for Visual Studio Feature:

1. Android project creation, build, and deploy to device
2. Breakpoints, conditional breakpoints, memory breakpoints
3. Single step through native and assembly code
4. Views for registers, memory, local variables, and global variables
5. Multi-threaded applications
6. Loading tombstone/logcat crash logs
7. Ability to debug projects compiled outside of this debugger tool
8. GNU Debugger (GDB)

Profilers :
1. Adreno GPU Profiler
Analyze and improve the graphics and compute performance in your apps with the insights available from Adreno Profiler. This easy-to-use tool delivers comprehensive GPU performance analysis, simplifies debugging, and lets you optimize for maximum visual app impact.


2. App Tune-up Kit
App Tune-up Kit is an innovative way for developers to profile and analyze any Android application in just 60 seconds. With one touch, you can evaluate app performance in five critical areas: CPU, GPU, Power, Thermal and Mobile Data.

App Tune-up Kit Features:

1. One touch analysis of any Android app in only 60 seconds
2. Evaluates performance in 5 critical areas: CPU, GPU, power, thermal and network usage
3. Results appear in an easy-to-understand dashboard
4. Reports accurate FPS on supported apps* (Beta feature)
5. Compares any app with the Google Play Top 20**
6. Shows the differences between two apps in 30 areas
7. No ads, analytics or data collection
8. Recommendations help developers improve their apps** (Beta feature)
9. Automatically estimates real-time power consumption when direct power readings are not available

3. Snapdragon Profiler
Qualcomm® Snapdragon Profiler is one of the most extensive system profiling tools available for developers. The tool is designed to show you how your application utilizes the underlying hardware and software system on commercial devices powered by Snapdragon processors. Using Snapdragon Profiler, you can identify the bottlenecks and focus on optimization of your apps. In addition to performance, this tool also provides insights into power, thermal and network usage. It supports three different modes, Real-time, Trace Capture, and Snapshot Capture, which give you a robust analysis to help optimize the performance and power of your applications.

Snapdragon Profiler Features:

1. Plug and play connectivity with Android devices and apps
2. Profiling data includes: CPU, GPU, and DSP* performance, power, thermal, and network
3. Supported system areas include: Android Trace, CPU, GPU, DSP, memory, and network data
4. GPU APIs: OpenGL ES 3.1, OpenCL 1.2, and Vulkan 1.0*

4. Trepn Power Profiler
Trepn™ Profiler is an on-target power and performance profiling application for mobile devices. Although Trepn runs on most Android devices, additional features are available when used with devices featuring Qualcomm® Snapdragon™ processors or development hardware.

Trepn Power Profiler Features:
1. Six fast-loading profiling presets
2. Overlays appear on screen on top of applications that are being profiled
3. Profile your device, or a single app
4. Displays battery power on supported devices
5. Not all devices are capable of reporting accurate battery power. Refer to the list of supported devices in the Trepn forum.
6. View CPU and GPU frequency and utilization
7. GPU frequency and utilization are only available on Snapdragon-powered devices.
8. Display network usage (cellular and Wi-Fi)
9. Runs on most Android smartphones and tablets (Android 4.0 and higher)
10. Advanced mode to manually select data points and save data for later analysis

These tools are very useful for development of application or product on Qualcomm platform.For each SDKs & tools Qualcomm provide video tutorials & documents on Qualcomm Developer Network. For More information you can login to Qualcomm Developer Network.

Saturday, 3 December 2016

Embedded systems

Introduction to Embedded systems

       Objectives
 After going through this session you should be able to
       Know what an Embedded system is
       Distinguish a Real time embedded system from other systems.
       Categories of embedded systems
       Know the architecture of embedded systems
       Tell the major components of an embedded systems.
       Understand Linux embedded system architecture
       Advantages of using Linux OS for embedded systems
       In day-to-day life we come across a wide variety of consumer electronics products such as TV remote controllers, Mobile phones, fax & xerox machines etc.
       Each of these devices have one or more programmable devices waiting to interact with the environment as effectively as possible.
       These are class of “Embedded systems”, providing service in real time i.e we need not have to wait too long for the action.
       An Embedded system is a special purpose system designed to perform specific control functions often with the real-time computing constraints.
       It is usually “Embedded” as a part of complete device including hardware and software components as compared to a general purpose computer such as PC, which is designed to be flexible and to meet a wide range of end-user needs.

Examples of Embedded system
       Embedded systems controls many of the common devices in use today
       Mobiles
       Digital watches
       Traffic lights
       Printers
       Medical equipment
       MP3 players, digital cameras
       Routers, telephone switches
       Automotive

Characteristics of Real Time Embedded systems (RTES)
       RTES is precisely the union of subsystems to discharge specific task coherently.
       Single-functioned.
       RTES is meant to perform specific task.
       Tightly constraint
       The constraint of the design and marketability of RTES is more rigid than their non-real-time non-embedded systems counter parts.
       Time domain constraints are the first thing to be taken care of.
       Size, weight, power consumption and cost are other major factors
       As embedded systems is dedicated to specific tasks, design engineers can optimize it to reduce the size and cost of the product and increase the reliability and performance.
       Reactive and Real time
       Many embedded systems must continually react to the changes in the system’s environment and must compute certain results in real time without delay.  For e.g.  A car’s cruise controller continuously monitors and reacts to speed and brake sensors.  It must compute acceleration or deceleration amounts repeatedly within a limited time; a delayed computation could result in failure to maintain control of the car.

Classification of embedded systems
       The heart of the embedded systems is customized microprocessor or microcontroller
       Small scale embedded systems
      Single 8/16bit microcontroller
      Little hardware and software complexity
      Mostly  battery operated
      Need to limit power dissipation when system is running continuously
       Medium scale embedded systems
      Single or few 16 or 32 bit microcontrollers or Digital signal processors(DSP)
      Both hardware and software complexity
       Advanced/Sophisticated embedded systems
      Need multiple scalable or configurable processors
      Enormous hardware and software complexity
      Constrained by processing speed available in their hardware units

Embedded systems components
       Hardware
       Processor, interrupt controllers, I/O devices, Memories etc.
       Software
       Performs series of tasks of controlling the hardware.
       Real-time operating system (RTOS)
       RTOS is intended to serve real-time application request.
       A key characteristic of an RTOS is the level of its consistency concerning the amount of time it takes to accept and complete an application’s task
       The chief design goals is not high throughput, but rather  a guarantee of a soft or hard performance category.
       RTOS that usually meets the deadline is soft-real-time OS and if it can meet the deadline deterministically it is hard-real-time OS.
        Every embedded system may not need RTOS.

Design metrics
       A design metrics is a measurable feature of the system’s performance, cost, time for implementation etc.
       Cost
      One time cost of designing the system. Once the system is designed, any units can be manufactured without incurring additional cost.
       Size
      Physical space required by the system, usually in bytes for software and gates or transistors for hardware.
       Performance
      The execution time of the system
       Power consumption
      Amount of power consumed by the system, which may determine the life time of the battery or the cooling requirements of the IC, since more power means more heat.
       Flexibility
      The ability to change the functionality of the system without incurring heavy cost. S/w is typically considered flexible.
       Time to prototype
      Time needed to build the working version of the system which can be used to verify the system’s usefulness and correctness and to refine the system’s functionality.
       Time to market
      Time required to develop a system to the point that it can be released and sold to customers. The main contributors are design time, manufacturing time and testing time.
       Maintainability
      It is the ability to modify the system after its initial release, especially by designers who did not originally design the system.
       Correctness
      This is the measure of the confidence that we have implemented the system’s functionality correctly. We can check the functionality throughout the process of designing the functionality.

Performance design metrics
       Performance of a system is a measure of how long a system takes to execute the desired tasks.
       Latency or response time
      This is the time between the start of the task’s execution and the end.  For e.g processing an image may take 0.24ms
       Throughput
       This is the number of tasks that can be processed per unit time. For e.g, a camera may be able to process 4 images per second.
       Based on the various design metrics, the functional blocks of RTES are implemented in software or hardware

System on Chip (SOC)
       System-on-chip (SOC) is an integrated circuit that integrates all components of a computer or other electronic system into a single chip
       It may contain digital, analog, mixed-signal and often radio frequency functions – all on one chip.
       In any embedded system application, functional blocks can be
      Level I: External discrete hardware components on board
      Level II: Hardware integrated with CPU on chip(SoC)
      Level III: Done by software running on CPU


Example of Advanced embedded systems
      Multi-core system of chip, like mobile handset which has one chip containing
       DSP processor for audio/video processing
       Embedded processor like ARM
       Custom hardware for GSM
       Custom peripherals (touch screen, memory card, usb)
      Automotive application, which has network of embedded microcontrollers on board communicating together through specific bus protocol like CAN.

Embedded system hardware



Processors
       The central processing unit is the most important components in the embedded systems.
       Depending on the type of applications the processors are broadly classified into 3 categories
       General purpose microprocessors
       Microcontrollers
       Digital signal processors
       General purpose microprocessors
       This microprocessor is designed to solve problems in a large variety of applications as diverse as communications, automotives and industrial embedded systems.
       The prime of microprocessor is to read data, perform extensive calculations on that data and store the results in mass storage device or display the results.
       Have complex architecture with multiple stages of pipeline and parallel processing.
       Microcontrollers
       A microcontroller is a small computer on a single integrated circuits containing a processor, memory and I/O peripherals.
       Using on chip hardware for I/O and RAM/ROM results in pretty low performance CPU. 
       Microcontrollers often use timers to generate interrupts.
       The prime use of microcontroller is to use to control the operations of the machine using a fixed program that is stored in ROM and does not change over the lifetime of the system.
       Digital signal processors
       These processors are designed for handling signal processing algorithms.
       One of the common operations required in such applications is array manipulations which required lot of multiplication/addition operations.
       DSP units generally use multiple access and multiport memory units, allowing more than one memory in one clock cycle.

Embedded hardware for Linux systems
       Processor architecture: Linux kernel supports wide range of 32 and 64 bits architectures
      X86 and x86-64 as found in PC and embedded platforms
      ARM, with hundreds of different SOCs(multimedia, industrial)
      PowerPC (Real-time, industrial)
      MIPS(networking applications)
      Others, SuperH, Blackfin etc.

Memory
       Memory serves processor short and long-term information storage requirements while registers serve the processor’s short term storage requirements.
       Both the programs and data are stored in the memory.
       The memory may be Read-only (ROM) or Random access memory (RAM)
       It may exist of the same chip with processor or outside the chip. On chip memory is faster than off chip memory.
       To reduce the access (read/write) time, a local copy of portion of memory can be kept in a small and fast memory called “cache” memory
       Memory can also be categorized as Static and dynamic.
      Dynamic memory (DRAM) dissipate less power, hence compact and cheaper but access time is slower than static memories.
      Static memory (SRAM) are much faster than DRAMs but consume more power.
       Memory
      RAM, a very basic Linux system can work within 8MB of ram, but a more realistic system will require at least 32MB RAM
       Storage
      Flash storage with NAND and NOR Flash
      Block storage with SD/MMC  and eMMC cards
       Input Output device and interfaces
      Input output interfaces are necessary to the RTES interact with the external world.
      The input output devices kerboard, the display screen, the antenna, microphone, speaker etc.
       Networking, Ethernet, WiFi, bluetooth etc.
       Communications, SPI, I2C, SDIO, USB, UART.

Embedded Linux system architecture



Software components
       Cross-compilation tool chain
      Compilers that runs on the development machines but generates code for the target machine
       Boot loader
      Started by the hardware, responsible for basic hardware initialization, loading and executing the kernel
       Operation system
      Contains the process and memory management, network stack, device drivers and services to user space
       C Library
      The interface between the kernel and user space applications
       Libraries and applications
      All user space components, open source, 3rd party or in-house

Boot loaders
       Boot loader is a piece of code which performs
      Basic hardware initialization
      Loading of an application binary, usually OS kernel, from the flash storage, from the network or from another type of non-volatile storage
      Possibly decompression of application binary
      Execution of the application
       Most boot loaders also provides command line interface with various commands implementing different operations.

Boot loaders on x86
       X86 processors are typically bundled with non-volatile memory containing program called BIOS.
       This program is executed by CPU on reset and is responsible for initialization of basic hardware and loading a small piece code from non-volatile memory.
       This piece of code is usually the 1st stage boot loader, which will load the full boot loader.
       The boat loader than offer all its features. It understands file system formats so that kernel file is loaded directly from normal file systems.



Embedded boot loaders
       On reset, the CPU starts executing code at fix address.
       BIOS is usually not present on embedded devices.
       The hardware design must ensure that the NOR flash chip is wired so that it is accessible at the address at which CPU starts executing code.
       The first stage boot loader must be programmed at this address in the NOR flash.



Introduction to Linux kernel
       User/Application space, where applications are executed.
       Kernel Space, where the kernel exist
       GNU C library, this provides the system call interface, a mechanism to communicate between user space application and kernel
       Fundamental architecture of Linux operating system



Kernel subsystem



       System call interface: provides the means to perform function calls from user space into the kernel.
       Process Management
      Kernel in-charge of process creation and termination.
      Communication  among different processes (signals, IPC primitives)
      Process scheduling, how processes share the CPU
       Memory management
      The kernel builds up the virtual address space for all the processes.
       File systems
      Linux is heavily based on file system concepts; almost everything is treated as file.
      Linux supports multiple file systems types, i.e different ways of organizing data on the physical medium.
      E.g.  Ext2, ext3,
      Virtual File system(VFS) provides a common interface abstraction for the various file systems supported by the kernel.
       Networking
      The network stack is part of the kernel.
      It is in charge of delivering data packets across applications and network interfaces.
      All routing and address resolution issues are implemented within the kernel.
       Device control
      Almost  every system operations eventually maps to the physical device. Few exceptions such as CPU, memory, etc,
      All device control operations are performed by the code, called as Device Driver.
       IPC
      The interprocess communication on Linux includes signals, pipes and sockets, shared memory and message queues.

User space
   User space on Linux is based on the following concepts
       Program: This is the image of an application, resides on a filesystem. When an application needs to be run, the image is loaded into memory and run.
       Virtual memory: allows each process to have its own address space including memory map for code, global data and dynamic data, stack etc
       System calls: These are entry points into the kernel so that the kernel can execute services on behalf of the application.


Advantages of Linux and open-source for embedded systems
       Reusability
      The key advantage of Linux and open-source in embedded systems is the ability to re-use components.
      Open-source ecosystem already provides many components for standard features from hardware support to n/w protocols, multimedia, graphics libraries.
      Allows to quickly design and develop complicated products based on existing components.
       Low cost
      Free software can be duplicated on as many systems as you want, free of charge.
      If your embedded systems uses only free software, you can reduce the cost of software license to zero.
      Allows you to have higher budget for hardware.
       Full control
      With open-source, you have source code for all the components
      Allows unlimited modifications, changes, tuning, debugging, optimizing of code.
      Allows to have full control over the software part of your system.
       Quality
     Allows to design your system with high quality components
      Many open-source components are widely used on millions of systems.
      Usually higher quality than what an in-house development can produce or even propriety vendors.
       Eases testing of new features
      Allows to easily explore the new possibilities and solutions as open-sources is freely available.
       Community support
      Allows to speed up the resolution of problems when developing your system, as open-source software components are developed by communities of developers and users, which can provide high-quality support.

Embedded Linux development environment
       Embedded Linux solutions: Two ways to switch to embedded linux
      Use solutions provided and supported by vendors such as MontaVista, WindRiver or TimeSys. These solutions come with their own development tools and environment. They use mix of open source & proprietary tools
      Use community solutions, open source solutions. We will use open source solutions for the course.

OS for Linux development
       Using Linux as desktop operating system is recommended to embedded linux developers.
      All community tools are developed and designed to run on Linux
      All knowledge used for using desktop, also applies to embedded devices
       Desktop Linux distribution
      Any good and sufficiently recent Linux desktop distribution
       Ubuntu, Fedora , Redhat etc
       We have chosen Ubuntu as it is widely and easy to use desktop Linux distribution.

Software packages
       The distribution mechanism for software for GNU/Linux is different from the one used in windows.
       Linux distributions provides a central and coherent way of installing, updating and removing applications and libraries: packages
       Packages contains the applications or library files, associated meta-data such as version and dependencies
      .deb on Debian and Ubuntu
      .rpm on Redhat
       Packages are stored in repositaries, usually on HTTP or FTP servers

Managing software packages
       Instructions for Debian based GNU/Linux systems (Debian/Ubuntu)
      Packages repositories are specified in
       /etc/apt/sources.list
      To update package repository list
       Sudo apt-get update
      To install  a given package
       Sudo apt-get install <package-name>
      To remove a given package
       Sudo apt-get remove <package-name>
      To install all available package updates
       Sudo apt-get dist-upgrade
      Get information about the package
       apt-cache show <package-name>
      Graphical Interfaces
       Synaptic for GNOME
       KpackageKit for KDE

Host Vs. Target environment
       In embedded development, there is always a spilt between
      The Host, the development workstation, which is typically a powerful PC
      The target, which is the embedded system under development.
      They are connected by various means, almost always a serial line for debugging, frequently an Ethernet connection and sometimes JTAG for low level debugging


Cross-compiling Toolchain
       The usual tool chain available on Linux workstation is a native toolchain.
       This toolchain runs on your desktop/workstation and generates code for your workstation, usually x86
       A cross-compiled toolchain is required for target. They run on the workstation but generate code for your target.

Cross-compilation toolchain components
       Binutils
      Binutils are set of programs necessary for  compilation, linking, assembling and other debugging operations
       as -  the assembler, that generates binary code from assembler source code
       Ld, the linker
       As, ranlib to .a archives used for libraries
       Objdump, readelf, nm, strings to inspect binaries
       Strip, to strip useless part of binaries in order to reduce their size
       http://www.gnu.org/software/binutils/
       GNU C compiler
       The basic C compiler used for generating object code (both kernel and applications)
       Can compile C, C++, Ada, Fortran, Java, Objective-C, Objective-C++, and generate code for a large number of CPU architectures, including ARM, AVR, Blackn, CRIS, FRV, M32, MIPS, MN10300, PowerPC, SH, v850, i386, x86 64, IA64, Xtensa, etc.
        http://gcc.gnu.org/
        Available under the GPL license, libraries under the LGPL.

C library
       The C library is an essential component of a Linux system
       Interface between the applications and the kernel
       Provides the well-known standard C API to ease application development
       Several C libraries are available:
      glibc, uClibc, eglibc, dietlibc, newlib, etc.
       The choice of the C library must be made at the time of the cross-compiling toolchain generation, as the GCC compiler is compiled against a specific C library.

Machines in build procedures
       Three machines must be distinguished when discussing toolchain creation
      The build machine, where the toolchain is built.
      The host machine, where the toolchain will be executed.
      The target machine, where the binaries created by the toolchain are executed.
       Four common build types are possible for toolchains

Different tool chain build procedures