8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 1/70
Introduction to Linux
Administration & ProgrammingIntel, Hillsboro, OR
Jan 18 2012
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 2/70
2
Content
Linux Kernel
GNU tools
Commercial tools Languages &
Portability
Assembly and C
Linux C++
Make, build, install
Perl, Python, PHP GUI frameworks
Linux Programming
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 3/70
Linux Programming
Ada
C, C++, C#
Java Haskell
LUA
Pascal
Python
Perl
PHP Ruby
Tcl/Tk
Vala
Linux Programming 3
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 4/70
Group Discussion
1. Programming, Art or Science?
2. Interpreted vs Compiled Languages
3. Compiler Machines
4. Web Programming
5. Mobile Programming
Linux Programming 4
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 5/70
Extreme Programming
Linux Programming 5
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 6/70
Target Software Environment
Same computer
Local or remote server
Embedded system
Mobile systems
Web platform
DB platform
Linux Programming 6
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 7/70
Software Projects
System:
Kernel or driver modules
Server (web, file, email) Applications
Local
Tools or Utilities Installer
Compiler
Linux Programming 7
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 8/70
Distribution
Target Audience
Internal Use
CD
Download from Web site
Frequency
One time
Progressive Releases
Linux Programming 8
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 9/70
Case Study
Build a software module that:
Processes data from USB port
Communicates via log or email Bundled with a hardware component
What language and distribution wouldyou use?
Linux Programming 9
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 10/70
Daemons
Network services are implemented bydaemons
Listen on a particular network port Usually defined in the services file
Run in the background
Have no controlling terminal
Use the system log to report any messages
Often run from the boot scripts
10Linux Programming
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 11/70
C++
C++ is one of the most popularprogramming languages in the world!
statically typed free-form
multi-paradigm
Compiled
Linux Programming 11
#include <iostream>
int main()
{ std::cout << "Hello, world!\n";}
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 12/70
C++ History
Began as enhancements to C,
adding classes
virtual functions operator overloading
multiple inheritance
templates exception handling
Linux Programming 12
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 13/70
C++ Uses
Highly Portable!
Most Hardware Support
Most Commercial Tools Most Applications
Linux Kernel!
Linux Programming 13
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 14/70
kernel.org
Linux Programming 14
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 15/70
Linux Programming 15
Linux Architecture
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 16/70
Kernel Subsystems
Linux Programming 16
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 17/70
Architecture Layer Details
Linux Programming 17
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 18/70
Linux Programming 18
Android Architecture
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 19/70
Kernel Compiling Steps
Compiling step
Configure kernel features
make
Install steps
sudo make install
sudo make modules_install
Linux Programming 19
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 20/70
Kernel configuration
Defines what features to include in the kernel:
Stored in the .config file at the root of kernel sources.
Most useful commands to create this config file:
make [xconfig | gconfig | menuconfig | oldconfig] To modify a kernel in a GNU/Linux distribution:
config files usually released in /boot/ , together with kernelimages: /boot/config-2.6.17-11-generic
The configuration file can also be found in the kernel itself:
> zcat /proc/config.gz
(if enabled in General Setup -> Kernel .config support)
Linux Programming 20
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 21/70
make xconfig
The graphical interface to configure theLinux kernel
Make sure you readhelp -> introduction: useful options!
Includes a File browser: easier to loadconfiguration files
New search interface to look forparameters
Linux Programming 21
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 22/70
make xconfig example
Linux Programming 22
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 23/70
make xconfig search interface
Linux Programming 23
Looks for a keywordin the description
string
Allows to selector unselect foundparameters.
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 24/70
Kernel configuration options
Linux Programming 24
Compiled as a module (separate file) CONFIG_ISO9660_FS=m
Compiled statically into the kernel CONFIG_UDF_FS=y
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 25/70
Corresponding .config excerpt #
# CD-ROM/DVD Filesystems#CONFIG_ISO9660_FS=mCONFIG_JOLIET=yCONFIG_ZISOFS=yCONFIG_UDF_FS=yCONFIG_UDF_NLS=y
## DOS/FAT/NT Filesystems#
# CONFIG_MSDOS_FS is not set# CONFIG_VFAT_FS is not setCONFIG_NTFS_FS=m# CONFIG_NTFS_DEBUG is not setCONFIG_NTFS_RW=y
Linux Programming 25
Section name
All parameters are prefixedwith CONFIG_
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 26/70
make menuconfig
Linux Programming 26
make menuconfig
Useful when no graphicsare available. Prettyconvenient too!
Same interface found inother tools: BusyBox,buildroot...
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 27/70
Undoing configuration changes
A frequent problem:
After changing several kernel configuration settings,your kernel no longer works.
If you don't remember all the changes you made,you can get back to your previous configuration:> cp .config.old .config
All the configuration interfaces of the kernel(xconfig, menuconfig, allnoconfig...)
keep this .config.old backup copy.
Linux Programming 27
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 28/70
Customizing the version string
To identify your kernel image with others built from the samesources (but a different configuration), use the LOCALVERSION setting (in General Setup)
Example:## General setup#CONFIG_LOCALVERSION="-acme1"
The uname -r command (in the running system) will return:2.6.20-acme1
Linux Programming 28
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 29/70
Kernel Compiling Steps
Compiling step
Configure kernel features
make
Install steps
sudo make install
sudo make modules_install
Linux Programming 29
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 30/70
Compiling Tips
Compiling faster on multiprocessor hosts
make -j <n>Runs several targets in parallel
Ccache (Compiler cache for C and C++)
Use it by adding a ccache prefixto the CC and HOSTCC definitions in Makefile
CC = ccache $(CROSS_COMPILE)gcc HOSTCC = ccache gcc
Linux Programming 30
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 31/70
More compiling tips View the full (gcc, ld...) command line:
make V=1
Clean-up generated files(to force re-compiling drivers):
make clean
Remove all generated filesCaution: also removes your .config file!make mrproper
Also remove editor backup & patch reject files:make distclean
Linux Programming 31
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 32/70
Generated filesWhat gets created when you run the make command
vmlinux Raw Linux kernel image, non compressed.
arch/<arch>/boot/zImage (default image on arm)zlib compressed kernel image
arch/<arch>/boot/bzImage (default image on i386)Also a zlib compressed kernel image.
Caution: bz means “big zipped” but not “bzip2 compressed”!
Linux Programming 32
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 33/70
Files created by make install
/boot/vmlinuz-<version> Compressed kernel image. Same as the
one in arch/<arch>/boot /boot/System.map-<version>
Stores kernel symbol addresses
/boot/config-<version> Kernel configuration for this version
Linux Programming 33
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 34/70
Files by make modules_install (1)
/lib/modules/<version>/ : Kernel modules + extras
build/ Everything needed to build more modules for this kernel:Makefile, .config file, module symbol information(module.symVers), kernel headers (include/ and include/asm/ )
kernel/ Module .ko (Kernel Object) files, in the same directory structureas in the sources.
Linux Programming 34
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 35/70
Files by make modules_install (2)
/lib/modules/<version>/ (continued)
modules.alias Module aliases for module loading utilities. Example line:alias sound-service-?-0 snd_mixer_oss
modules.dep Module dependencies
modules.symbols Tells which module a given symbol belongs to.
All the files in this directory are text files.Don't hesitate to have a look by yourself!
Linux Programming 35
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 36/70
Compiling the kernel in a nutshell
make xconfigmake
sudo make installsudo make modules_install
Linux Programming 36
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 37/70
Kernel and Device Drivers
In order to talk to the kernel, the driverregisters with subsystems to respond to
events Some Examples of Events:
Opening a file
A page fault Plugging a new USB device
Linux Programming 37
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 38/70
Linux Architecture
Applications,
GNU tools,
Shells
System Call Interface
VFS
HD
IDE, SCSI
Mem Mgr Proc MgrNet Sockets
TCP/IP driver
NIC driverFloppy driver
FD NIC
User
Kernel
Hardware
38Linux Programming
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 39/70
User Interface of a Device driver
Since Linux follows the UNIX model, and in UNIXeverything is a file, users talk with device driversthrough device files
Device files are a mechanism, supplied by the kernel,precisely for this direct User-Driver interface.
Koolchar is a character device, & thus the user talksto it through a character device file
The other common kind of device file is a blockdevice file
Linux Programming 39
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 40/70
NETSubsystem
Linux Programming 40
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 41/70
GNU Tools
Make
AutoMake
AutoConf Gcc, the GNU Compiler for:
C, C++, Fortran, Java, Ada, Go
http://gcc.gnu.org Libtool
Linux Programming 41
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 42/70
GNU Architectures
Alpha PA-RISC
ARM PDP-11
Atmel AVR PowerPC
Blackfin R8C/M16C/M32CH8/300 SPARC
HC12 SPU
IA-32 (x86) SuperH
IA-64 System/390/zSeries
MIPS VAX
Motorola 68000 x86-64
Linux Programming 42
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 43/70
A Simple Makefile
Linux Programming 43
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 44/70
A Not-So-Simple Makefile
Linux Programming 44
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 45/70
Hello World in C
Linux Programming 45
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 46/70
Hello World
vi `hello.c„
#include <stdio.h>
main()
{printf("Hello world!\n");
}
`Makefile.am„
bin_PROGRAMS = hello
hello_SOURCES = hello.c
Linux Programming 46
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 47/70
Building Hello World
% ./configurechecking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... Yes
checking for gcc... gcc
…
% makesource='hello.c' object='hello.o' libtool=no \
depfile='.deps/hello.Po' tmpdepfile='.deps/hello.TPo' \ depmode=gcc3 /bin/sh ./depcomp \ …
gcc -g -O2 -o hello hello.o
Linux Programming 47
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 48/70
Software Building
Hands-on Lab 1
Sample C program and GCC use
Linux Programming 48
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 49/70
Commercial Tools
IBM
Ada, Rational, COBOL
Intel® C++ Compiler Professional for Linux
Intel® Parallel Studio XE
Zend http://framework.zend.com/
Linux Programming 49
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 50/70
What are you going to build today?
Linux Programming 50
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 51/70
Powerful Software!
Content Management System
Drupal.org
Joomla.org Wordpress.org
Client Relationship Management
SugarCRM Learning Management System
Moodle.org
Linux Programming 51
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 52/70
Source Forge SF.NET
Linux Programming 52
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 53/70
Platforms
Linux Programming 53
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 54/70
Early Web Days
2 Tiers:
Web
Logic
Linux Programming 54
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 55/70
Scripting
Perl
Python
PHP
Linux Programming 55
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 56/70
Perl
General-purpose, interpreted, dynamic language
Developed by Larry Wall [a linguist working as a systems
administrator for NASA] in 1987 as a general-purpose Unixscripting language to make report processing easier
Popularity in 1990s as a CGI scripting language
The "duct tape that holds the Internet together"
Linux Programming 56
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 57/70
Perl Code
#!/usr/local/bin/perl#### printenv—demo CGI program which just prints its environment##
#print "Content-type: text/plain\n\n";foreach $var (sort(keys(%ENV))) {$val = $ENV{$var};$val =~ s|\n|\\n|g;
$val =~ s|"|\\"|g;print "${var}=\"${val}\"\n";
}
Linux Programming 57
#!/usr/local/bin/perl
print "Hi there!\n";
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 58/70
Perl Evaluation
Multiplatform
Open Source
Free to use Early start,
Extensive library!
Complex syntax Not the best performance
Linux Programming 58
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 59/70
Software Building
Hands-on Lab 2
Sample Perl program and use
Linux Programming 59
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 60/70
Python
General-purpose, high-levelprogramming language which
emphasizes code readability It claims to combine "remarkable power
with very clear syntax“ with fun
Red Hat installer is written in Python! It‟s called Anaconda!
Linux Programming 60
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 61/70
Python Code
print 'Hello, world!„
name = raw_input('What is your name?\n')
print 'Hi, %s.' % (name)
my_list = ['john', 'pat', 'gary', 'michael']for i, name in enumerate(my_list):
print "iteration %i is %s" % (i, name)
Linux Programming 61
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 62/70
Python Evaluation
Multiplatform
Open Source
Free to use VERY popular
Complex test environment
Linux Programming 62
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 63/70
Software Building
Hands-on Lab 3
Sample Python program and use
Linux Programming 63
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 64/70
PHP
Server-side scripting language originally designedfor web development to produce dynamic web pages Competes with Microsoft's Active Server Pages (ASP)
PHP can be deployed on most web servers andalmost every OS free of charge!
It‟s embedded into an HTML source document, rather
than calling an external file to process data It can directly retrieve or update a database!
Linux Programming 64
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 65/70
PHP Codeclass Person {
public $firstName;
public $lastName;
public function __construct($firstName, $lastName = '') { //Optional parameter
$this->firstName = $firstName;
$this->lastName = $lastName;
public function greet() {
return "Hello, my name is " . $this->firstName . " " . $this->lastName . ".";
}
public static function staticGreet($firstName, $lastName) {return "Hello, my name is " . $firstName . " " . $lastName . ".";
}
}
Linux Programming 65
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 66/70
PHP code results
$he = new Person('John', 'Smith');
$she = new Person('Sally', 'Davis');
$other = new Person('Joe');
echo $he->greet(); // prints "Hello, my name is John Smith."echo '<br />';
echo $she->greet(); // prints "Hello, my name is Sally Davis."
echo '<br />';
echo $other->greet(); // prints "Hello, my name is Joe ."
echo '<br />';
echo Person::staticGreet('Jane', 'Doe'); // prints "Hello, my name is Jane Doe."
Linux Programming 66
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 67/70
PHP Evaluation
Multiplatform
Open Source
Free to use VERY popular
Extensive libraries!
Complex test environment
Linux Programming 67
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 68/70
Software Building
Hands-on Lab 4
Sample PHP program and use
Linux Programming 68
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 69/70
Integrated Development Environments
Anjuta 3.2.2, GNOME based
CodeLite 3.5.5375 cross platform
Eclipse 3.7.1 cross platform
Kdevelop 4.2.3 KDE based cross platform
NetBeans 7.1 cross platform
Linux Programming 69
8/2/2019 Intel Day3
http://slidepdf.com/reader/full/intel-day3 70/70
Summary
Linux Kernel
GNU tools
Commercial tools Languages &
Portability
Assembly and C
Linux C++
Make, build, install
Perl, Python, PHP GUI frameworks